编辑:请参见下面的注释。更改问题以反映此新信息
根据我在《codex》中的理解,save\\u post意味着在保存帖子后(以及创建新帖子时)总是会触发。然而,在使用批量编辑时,我遇到了一些奇怪的行为。使用下面的代码,我的同步功能在使用快速编辑和批量编辑时运行得很好,但仅使用批量编辑时同步帖子格式除外。
要清楚的是,我正在同步的批量编辑中唯一可用的内容是作者、帖子格式、类别、标签和帖子状态。WordPress数据库中的all正在更新,但由于某些原因,只有作者、标记和类别使用my sync方法同步到外部数据库。Post格式不会同步,但如果我再次运行批量编辑操作,即使没有更改任何内容,也会发生同步,这最初让我认为save\\u Post函数在保存Post之前启动,导致旧数据同步,但如果其余的都能正常工作,那就不可能了(注意:我发现事实上是这样的,除了post\\u格式和设置粘性贴子(我不关心这些))。以下是我的主插件文件中的代码:
require( plugin_admin_dir . \'plugin-sync.php\' );
add_action( \'save_post\', \'savethepost\', 2000);
function savethepost($post_id) {
if (get_post_meta($post_id, \'_externaldb_post_donotsync\', true) == 1) {
return;
} else {
if (get_post_status( $post_id ) != \'publish\') {
plugin_sync::externaldb_delete($post_id);
} else {
plugin_sync::externaldb_sync($post_id);
} // end if
} // end if
}
由于我最初发布了这篇文章,我发现在使用批量编辑时,set\\u post\\u格式出现在wp\\u update\\u post之后。在运行同步功能时,如何创建一个变通方法来获取新的帖子格式?还有别的钩子可以用吗?无论如何,我希望这是足够的信息。谢谢你的帮助。
最合适的回答,由SO网友:T Andrew 整理而成
我可以通过在save\\u post回调中调用set\\u post\\u format并确保检查其set和不等于“no change”选项来解决问题。不确定这是否是最好的方式,但它确实有效。
require( plugin_admin_dir . \'plugin-sync.php\' );
add_action( \'save_post\', \'savethepost\', 2000);
function savethepost($post_id) {
if (get_post_meta($post_id, \'_externaldb_post_donotsync\', true) == 1) {
return;
} else {
if (get_post_status( $post_id ) != \'publish\') {
plugin_sync::externaldb_delete($post_id);
} else {
if ( isset( $_REQUEST[\'post_format\'] ) && $_REQUEST[\'post_format\'] != -1 ) {
set_post_format($post_id, $_REQUEST[\'post_format\']);
}
plugin_sync::externaldb_sync($post_id);
} // end if
} // end if
}