updated_post_meta
以外,我从未尝试执行所有钩子add_action('updated_post_meta', 'my_function');
function my_function($post_id) {
echo 'This is my post ID : '.$post_id;
}
我已经尝试过此
add_action('save_post', 'my_function');
,但没有ID回显,或者这消息已经回显,但由于发送了重定向标头而从未呈现。#1 楼
当帖子更新时,会触发一些挂钩:'pre_post_update'
是在帖子更新之前触发的动作,传递的参数为2:$post_ID
和$data
这是发布表的所有其他数据库列的数组。'transition_post_status'
是在更新时触发的钩子,并传递3个参数:$ new_post_status,$old_post_status
和$post
(对象)。 ,还有另外两个触发的过渡挂钩,但是它们是动态命名的,这意味着触发的有效操作取决于新旧的发布状态。"{$old_status}_to_{$new_status}"
和"{$new_status}_{$post->post_type}"
。首先传递唯一的post对象作为参数,第二次传递post id和post对象。在此处查找文档。'edit_post'
传递2个参数:$post_ID
和$post
(对象)'post_updated'
传递3个参数:$post_ID
,$post_after
(更新后的发布对象),$post_before
(更新之前的发布对象)另一个动态挂钩:
"save_post_{$post->post_type}"
,取决于发布类型,例如对于标准帖子是'save_post_post'
,对于页面是'save_post_page'
,此钩子传递3个参数:$post_ID
,$post
(对象)和$update
是布尔值(true或false),在执行更新时为true,实际上也会触发此钩子第一次保存帖子时。'
save_post
'会在更新和首次保存时触发,并传递上一个挂钩的相同3个参数。在更新和首次保存时均触发的“
save_post_{$post_type}
”,并传递与上一个挂钩相同的前两个参数。最后,您在更新和首次保存时均触发了“
wp_insert_post
”,并通过每次更新帖子时,都会通过后端的管理页面以及使用
wp_update_post
或wp_insert_post
函数“手动”更新时更新这些钩子。 /> 使用管理页面更新帖子时,还会触发其他挂钩,例如
'update_post_redirect'
或'post_updated_messages'
。 (请参阅此和此WPSE答案以获取用法示例。)请注意,如果要使用某些hooks参数(不是第一个钩子参数),则必须在add_action
调用中显式声明它。 例如如果要使用
'$update'
钩子的'save_post'
参数(即第3个参数),则需要在3
上将$accepted_args
作为add_action
参数添加(请参阅文档):// if you don't add 3 as as 4th argument, this will not work as expected
add_action( 'save_post', 'my_save_post_function', 10, 3 );
function my_save_post_function( $post_ID, $post, $update ) {
$msg = 'Is this un update? ';
$msg .= $update ? 'Yes.' : 'No.';
wp_die( $msg );
}
最后要注意的是时间:必须确保在触发操作之前已调用
add_action
,否则它将无效。例如此代码:
wp_update_post( $post );
add_action( 'save_post', 'my_function', 10, 3 );
不会执行任何操作,因为在触发钩子之后添加了操作。这很容易识别,在现实世界中代码并不总是如此。
评论
我认为在仪表板上点击“添加新内容(帖子,页面,CPT)”时也会触发“ save_post”操作钩。要查看自己,只需运行以下代码。函数save_post_test($ post_id,$ post,$ update){print'post_id:'; var_export($ post_id);打印'post:'; var_export($ post);打印'update:'; var_export($ update); wp_die('save_post挂钩在您单击Add New ..时运行。'); } add_action('save_post','save_post_test',10,3);为什么“ save_post”操作在“添加新”而不是“发布”上运行?我想发布自动草稿帖子。
–lowtechsun
18年11月12日在17:52
@lowtechsun就像在A中所说的那样,每次更新帖子(即保存在DB中)都会触发钩子。当您点击“添加新内容”时,接近页面加载时,WP创建了一个存储在DB中的草稿帖子,因此他的钩子被解雇了。
– gmazzap♦
18年11月13日在9:14
谢谢您回复我。昨天才发现这一点,并认为它的概念令人困惑。意思是首先我打开页面以添加新帖子。在这个阶段,我以为我还没有创建帖子。只有单击“发布”后,我才认为新帖子已创建。进一步说,我希望WP如果我单击“添加新项”,但在不单击“发布”的情况下离开该页面,则确实删除了自动起草的帖子?
–lowtechsun
18年11月13日在9:18
#2 楼
为什么不挂在post_updated_messages
。这样,您可以显示此消息,就像更新默认的wordpress帖子一样。add_filter('post_updated_messages', 'your_message');
function your_message(){
}
在此处查找示例:
http:// codex.wordpress.org/Function_Reference/register_post_type
在
post_updated_messages
下
评论
您在save_post之后有一个空格,是这里的错字,还是您原始代码中的错字?另外,在开发时启用调试。@Milo抱歉打错,但不是原始代码
如果是这样,那么在创建新帖子时,您应该在屏幕的左上角看到您的输出。保存现有帖子的操作发生在重定向之前,因此除非启用了调试,否则您将看不到任何内容。