比如说,我希望每个帖子都有草稿状态,所以我使用下面的代码。
<?php
add_action('save_post', 'mytheme_save_post');
function mytheme_save_post($post_id) {
remove_action('save_post','mytheme_save_post');
wp_update_post( array("ID"=>$post_id, "post_status"=>'draft'));
add_action("save_post","mytheme_save_post");
}
我知道wp_update_post()
本身会触发save_post
钩子,所以为了避免无限循环,我们必须在使用该函数之前使用remove_action('save_post','mytheme_save_post')
。我的问题是,为什么我需要重新挂接回调函数,而我已经完成了。如果不重新挂钩,它就不起作用。
一开始这可能会令人困惑,但正如您所说,这是避免无限循环所必需的。
如果您正在调用一个包含save_post钩子的函数,如
wp_update_post
,则您的钩子函数将创建一个无限循环。为了避免这种情况,请在调用所需的函数之前取消挂接函数,然后重新挂接它。
- 来源@https://developer.wordpress.org/reference/hooks/save_post/
add_action
允许将函数挂接到特定操作,此处为init
。
在WordPress完成加载后,但在发送任何标头之前激发。
add_action
本身不会触发任何事情。通过使用CCD_ 8;"拉";Wordpress触发序列之外的操作,这就是为什么如果你不重新挂起它,它就不起作用。
粗略地说,这就像把一个文件放在一个文件夹里,如果你试图访问它时文件不在那里,那么你就会出现错误,或者你的请求被忽略。这里的exept,在你重新挂钩它之前,它甚至不知道它的存在。如果你不重新挂钩它,你几乎只是在声明一个函数本身,而没有触发顺序。
您可以在这里查看Wordpress激发序列的简短版本。