当我在帖子上按update(本例中的第页)时,我遇到了多次触发挂钩的问题
我尝试了这里的一切:Unable to prevent function using save_post firing twice
但由于看起来我收到了多个请求,我开始检查访问日志。
当我点击更新时,这些是发送的帖子:
[ip_number] - - [26/Aug/2021:15:31:00 +0000] "POST /wp-json/wp/v2/pages/1373?_locale=user HTTP/2.0" 200 3805 "https://example.com/wp-admin/post.php?post=1373&action=edit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
[ip_number] - - [26/Aug/2021:15:31:00 +0000] "POST /wp-admin/post.php?post=1373&action=edit&meta-box-loader=1&meta-box-loader-nonce=[nonce]&_locale=user HTTP/2.0" 302 0 "https://example.com/wp-admin/post.php?post=1373&action=edit" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
所以我开始做一些日志记录:
add_action("publish_page", "my_publish_page", 10, 2);
function my_publish_page($postId, $post) {
error_log("Debug for my_publish_page");
error_log("postId: " . $postId);
error_log("GET: ". var_export($_GET, true));
}
日志文件显示:
[26-Aug-2021 15:41:59 UTC] Debug for my_publish_page
[26-Aug-2021 15:41:59 UTC] postId: 1373
[26-Aug-2021 15:41:59 UTC] GET: array (
\'_locale\' => \'user\',
)
[26-Aug-2021 15:41:59 UTC] Debug for my_publish_page
[26-Aug-2021 15:41:59 UTC] postId: 1373
[26-Aug-2021 15:41:59 UTC] GET: array (
\'post\' => \'1373\',
\'action\' => \'edit\',
\'meta-box-loader\' => \'1\',
\'meta-box-loader-nonce\' => \'[nonce]\',
\'_locale\' => \'user\',
)
因此,发送两个请求,都会触发publish\\u page操作挂钩(以及save\\u post或任何您喜欢的类似挂钩)。两者都具有帖子的发布状态,对于wp\\u is\\u post\\u autosave(或do\\u autosave),它们都不是真的。
例如,我可以查看$\\u GET变量,仅在$\\u GET[\'post]=$posid时触发我的代码,但这似乎有点粗糙。为什么会发生这种情况,是否有一个干净的解决方案来防止这种情况的发生;“双重射击”;?