Сделать метабокс пользовательского типа сообщений полностью автоматическим и массовым / быстрым редактированием

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

Поэтому я теперь использую показанное решение, чтобы исправить это:

function save_stationinfo($post_id) { if((defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) || (defined('DOING_AJAX') && DOING_AJAX) || isset($_REQUEST['bulk_edit'])) return; update_post_meta($post_id, 'station_url', $_POST['station_url']); update_post_meta($post_id, 'station_subheadline', $_POST['station_subheadline']); update_post_meta($post_id, 'station_streams', $_POST['station_streams']); } 

Но это отключает функцию автосохранения для всех настраиваемых метаданных. То, что я на самом деле хочу, – сделать мой метаболикс полностью совместимым с автосохранением, ajax (не уверен, для чего предназначен режим DOING_AJAX), и функциональность WordPress с объемным редактированием / быстрой редакцией, так что пользовательские метаполя автоматически сохраняются, а я я могу добавить некоторые поля в диалог быстрого / объемного редактирования.

Может ли кто-нибудь помочь мне здесь или показать мне, где я могу найти учебник для этого? (Удаление if-утверждения здесь не помогает, так как это возвращает меня к моей первой проблеме, конечно.) Спасибо заранее!

WordPress не отправляет содержимое настраиваемых полей во время автосохранения (только заголовок, пул и контент). Вот почему содержимое пользовательского поля будет удалено, если вы попытаетесь сохранить данные: вы не можете видеть разницу между удаленным и отсутствующим контентом.

Для этого я бы создал отдельную функцию автосохранения, потому что способ, которым обрабатывает WordPress, может меняться в любое время, и нет реального API. Сохраненные поля жестко закодированы без фильтра:

 if ( fullscreen && fullscreen.settings.visible ) { post_data["post_title"] = jQuery('#wp-fullscreen-title').val() || ''; post_data["content"] = jQuery("#wp_mce_fullscreen").val() || ''; } else { post_data["post_title"] = jQuery("#title").val() || ''; post_data["content"] = jQuery("#content").val() || ''; } if ( jQuery('#post_name').val() ) post_data["post_name"] = jQuery('#post_name').val(); 

Посмотрите на wp-admin/includes/ajax-actions.php и wp-includes/js/autosave.js чтобы посмотреть, как это работает.

Поэтому в основном создайте копию этого файла JavaScript, удалите все, что вы можете повторно использовать, и измените только поля, которые вы хотите сохранить автоматически. Затем вставьте его в поле «autosave 'autosave' в списке зависимостей.

Другая идея – проверить мой ответ здесь со ссылкой на мой плагин Custom Bulk / Quick Edit WordPress и полный код Gist для настраиваемого сценария массового и быстрого редактирования типа сообщений для 3-настраиваемых полей.

Суть касается DOING_AUTOSAVE , но игнорирует прямой DOING_AJAX потому что мы хотим, чтобы он работал в любом случае.