Пользовательское поле удаляется после автосохранения

Почему не пользовательские поля из этого типа сохраняются?

У меня есть пользовательский пост-тип под названием «Фотографии» и несколько мета-ящиков. Вот в основном то, что у меня есть в моих functions.php

add_action('init', 'photo_register'); function photo_register() { $labels = array( 'name' => _x('My Photos', 'post type general name'), 'singular_name' => _x('Photo', 'post type singular name'), 'add_new' => _x('Add New', 'photo item'), 'add_new_item' => __('Add New Photo'), 'edit_item' => __('Edit Photo'), 'new_item' => __('New Photo'), 'view_item' => __('View Photo'), 'search_items' => __('Search Photos'), 'not_found' => __('Nothing found'), 'not_found_in_trash' => __('Nothing found in Trash'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, //'menu_icon' => get_stylesheet_directory_uri() . '/article16.png', 'rewrite' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => 4, 'taxonomies' => array('post_tag','category'), 'supports' => array('title','comments','trackbacks','revisions','custom-fields','page-attributes','thumbnail', 'excerpt', 'tags') ); register_post_type( 'photo' , $args ); register_taxonomy("Photos", array("photo"), array("hierarchical" => true, "label" => "Photos", "singular_label" => "Photo", "rewrite" => true)); } add_action("admin_init", "admin_init"); add_action('save_post', 'save_details'); function admin_init(){ // add_meta_box( $id, $title, $callback, $page, $context, $priority ); add_meta_box("media", "Media Type", "media", "photo", "side", "high"); add_meta_box("map_meta", "Mapping Info", "map_meta", "photo", "normal", "high"); add_meta_box("photo_meta", "Add a photograph", "photo_meta", "photo", "normal", "high"); } function media(){ global $post; $custom = get_post_custom($post->ID); $film = $custom["film"][0]; $camera = $custom["camera"][0]; ?> <label>Camera:</label> <input name="camera" value="<?php echo $camera; ?>" /> <label>Film:</label> <input name="film" value="<?php echo $film; ?>" /> <?php } function photo_meta(){ global $post; $custom = get_post_custom($post->ID); $single_photo = $custom["single_photo"][0]; ?> <div id="singleUpload"> <div class="sUinput"> <input id="single_photo" name="single_photo" value="<?php echo $single_photo; ?>" /> </div> <div class="sUbutton"> <input type="button" value="Upload" name="upload" id="upload_image_button" /> </div> </div> <?php } function map_meta() { global $post; $custom = get_post_custom($post->ID); $latitude = $custom["latitude"][0]; $longitude = $custom["longitude"][0]; ?> <div id="mapControls"> <div class="lat"> <p><label for="lat">Latitude:</label><br /> <input id="latitude" name="latitude" value="<?php echo $latitude; ?>"></input></p> </div> <div class="lng"> <p><label>Longitude:</label><br /> <input id="longitude" name="longitude" value="<?php echo $longitude; ?>" ></input></p> </div> <?php } function save_details(){ global $post; update_post_meta($post->ID, "single_photo", $_POST["single_photo"]); update_post_meta($post->ID, "latitude", $_POST["latitude"]); update_post_meta($post->ID, "longitude", $_POST["longitude"]); update_post_meta($post->ID, "camera", $_POST["camera"]); update_post_meta($post->ID, "film", $_POST["film"]); } 

Некоторое время я работал над этим, но теперь он не будет сохранять поля и обновить все. Кто-нибудь может понять, в чем проблема? Любые предложения о том, как найти ошибку? В принципе, все, что вы можете подумать, чтобы улучшить это, было бы очень полезно, особенно если я могу заставить его работать!

РЕДАКТИРОВАТЬ

Я понял, что они сохраняют, но если я останусь на почте достаточно долго, чтобы запустить автосохранение, а затем попытайтесь перейти от меня, я получаю сообщение:

На странице предлагается подтвердить, что вы хотите уйти – данные, которые вы ввели, не могут быть сохранены.

Я нажимаю кнопку отпуска, а затем, когда я возвращаюсь к сообщению, все стирается. Что здесь происходит?

Solutions Collecting From Web of "Пользовательское поле удаляется после автосохранения"

Я использую следующий код, чтобы предотвратить обновление моих настраиваемых полей во время автоматического сохранения, ajax-запросов (быстрого редактирования) и массовых изменений.

 add_action('save_post', 'save_my_post'); function save_my_post($post_id) { // Stop WP from clearing custom fields on autosave, // and also during ajax requests (eg quick edit) and bulk edits. if ((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_AJAX') && DOING_AJAX) || isset($_REQUEST['bulk_edit'])) return; // Clean, validate and save custom fields } 

См. Также: Как предотвратить очистку настраиваемых полей во время массового редактирования?

Вы должны игнорировать все запросы автосохранения. Измените функцию сохранения следующим образом:

 function save_details(){ if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return; global $post; update_post_meta($post->ID, "single_photo", $_POST["single_photo"]); update_post_meta($post->ID, "latitude", $_POST["latitude"]); update_post_meta($post->ID, "longitude", $_POST["longitude"]); update_post_meta($post->ID, "camera", $_POST["camera"]); update_post_meta($post->ID, "film", $_POST["film"]); } 

Кроме того, вы должны обязательно добавить немного больше проверки, чтобы функция не вызывалась в ситуациях, отличных от того, для чего она предназначена. Обычно я проверяю тип сообщения, разрешения пользователя и nonces.

Вам нужно изолировать действие save_post. Вы также не передаете post_id в качестве аргумента функции.

 function save_details($post_id){ $post =& $_REQUEST; if($post['post_type'] == 'post'){ update_post_meta($post_id, "single_photo", $_POST["single_photo"]); } }