我正在尝试创建一个自定义的帖子类型,我遇到了与上面描述的相同的问题here; 手动保存时,我的自定义元信息已正确保存,但在autosave 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\']);
}
但这会禁用所有自定义元数据的自动保存功能。我真正想要的是使我的metabox与Wordpress的autosave、ajax(但不确定DOING\\u ajax模式的用途)和批量编辑/快速编辑功能完全兼容,以便自动保存自定义元字段,并且我能够将一些字段添加到快速/批量编辑对话框中。
有谁能在这里帮助我,或者告诉我在哪里可以找到这方面的教程吗?(删除if语句在这里没有帮助,因为它当然会让我回到我的第一个问题。)提前感谢!
SO网友:fuxia
WordPress在自动保存期间不发送自定义字段的内容(仅发送标题、段塞和内容)。这就是为什么如果您试图保存数据,自定义字段内容将被删除:您看不到已删除内容和丢失内容之间的区别。
我将为此创建一个单独的autosave函数,因为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\'
在其依赖项列表中。