Я использую настраиваемый тип сообщения с настраиваемыми мета-полями, но автосохранение и диалоговое окно «несохраненные изменения», похоже, не запускаются для этих настраиваемых мета-полей. Автосохранение не так важно для меня, как диалоговое окно несохраненных изменений — есть ли способ его вызвать?
function add_meta_boxes() {
add_meta_box('places_location', __('Location'), array(&$this, 'location_box'), 'place', 'normal', 'high');
}
function location_box($post) {
wp_nonce_field(plugin_basename(__FILE__), 'places_location_nonce');
$lat = get_post_meta($post->ID, 'places_lat', true);
$lng = get_post_meta($post->ID, 'places_lng', true);
?>
<p>
<label>
Latitude:
<input name="places_lat" value="<?php echo esc_attr($lat); ?>" />
</label>
<label>
Longitude:
<input name="places_lng" value="<?php echo esc_attr($lng); ?>" />
</label>
</p>
<?php
}
function save_place($id) {
// skip unverified location nonces
if(!wp_verify_nonce($_POST['places_location_nonce'], plugin_basename(__FILE__))) return;
// skip autosave calls
// commenting this out still doesn't trigger saving these fields on autosave
//if(defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
// update our custom post meta
update_post_meta($id, 'places_lat', (float)$_POST['places_lat']);
update_post_meta($id, 'places_lng', (float)$_POST['places_lng']);
}
покажи нам свой код метабокса
Не думал, что это так уж необходимо, так как код невероятно прост, но я все равно добавил его. Сохранение черновиков и обновление опубликованных сообщений работает нормально, но изменения в настраиваемых полях не вызывают ни диалоговое окно «несохраненные изменения», ни автосохранение.
Есть идеи, почему автосохранение не обновляет мою пользовательскую мета-публикацию?
@Kevin: Если вы прочитаете
autosave
функцию в этом файле Javascript, вы заметите, что она никогда не смотрит на метаполя. Таким образом, вам также придется дублировать эту функцию и добавлять данные метаполя самостоятельно. По этой причине все этиsave_post
обработчики метаданных возвращаются раньше, если ониDOING_AUTOSAVE
установлены.Код действительно смотрит только на редактор TinyMCE или поле заголовка и содержимого, если редактор скрыт:
Вы можете заменить этот
onbeforeunload
обработчик своим собственным (конечно, не забудьте включить существующую функциональность). Или поиграть сisDirty()
состоянием редактора TinyMCE и этимautosaveLast
значением?Я решил эту проблему, используя этот отличный плагин jQuery, который проверяет грязное состояние формы. Он содержит методы для проверки добавленных/удаленных/измененных полей через javascript. Это вообще пиздец!
Я не занимался «АВТОСОХРАНЕНИЕМ» (пока). Я надеюсь, что кто-то найдет это полезным.