Intereting Posts
Проектирование плагина, который использует iFrame для обработки данных в admin Показать тип персонализированного типа категории X на странице архива категории X? Добавление изображения в заголовок Тип персонализированного WPML – не переведен Пользовательский WordPress Excerpt в терминах Как поместить те же самые виджеты по умолчанию при активации темы? Количество загрузок, отображаемых для плагина в каталоге плагина WordPress.org, включает автоматические обновления? Добавление admin-ajax.php к интерфейсу. Хорошая или плохая идея? Как перебирать определенные значения полей простые шаги для создания формы переднего плана без плагина Разрешить читателю переупорядочивать сообщения для себя (самые старые) Можем ли мы предоставить ожидающую роль роли wp_insert_user? Тот же заголовок / нижний колонтитул в Admin, на всех сетевых сайтах в многопользовательском режиме Редактирование списка нескольких полей Разве это все еще имеет смысл с использованием json endpoint ep_mask теперь, когда есть новый rest api?

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

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

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

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

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

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

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

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

Я использую следующий код, чтобы предотвратить обновление моих настраиваемых полей во время автоматического сохранения, 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"]); } }