Intereting Posts
Запретить пользователю просматривать кешированную версию страницы после изменения html и css. Я все время прошу подтвердить мою электронную почту Правило WordPress rewrite_rules_array не работает должным образом Как я могу показать регистрационную форму внутри модальной? Когда запускается действие admin_init? Постоянно нарушаются регулярные Как изменять изображения во время загрузки multisite не отображает уменьшенное изображение после загрузки в галерею nextgen Как разрешить перенос роли вручную без разрешения на публикацию получить текущий индекс опубликованного контента на странице категории WordPress публикует сообщение, не перенаправляя на страницу редактирования Ошибка импорта файла экспорта localhost на сервер Настройка постоянной ссылки удалить пользовательскую базу таксономии / слизню Добавление пользовательских архивов типа записей в меню WordPress

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

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

У меня есть пользовательский пост-тип под названием «Фотографии» и несколько мета-ящиков. Вот в основном то, что у меня есть в моих 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"]); } }