基于一个示例found on this page, 我试图在我的插件中使用这个。没有开火。一张便条on this page 声明的publish\\u future\\u post已弃用,并替换为future\\u to\\u publish。这也失败了。
因此,我试图制作一个简单的插件,只在插件中添加这个add\\u操作。再一次,Posteta没有更新。
下面是“future post”插件中的代码。
function future_publish ( $post_id ) {
update_post_meta( $post_id, \'hook_fired\', \'true\' );
}
add_action( \'future_to_publish\', \'future_publish\' );
我一直在绕来绕去。一些人发布的过渡状态工作正常,其他人说它不能包装在is\\U admin中,而且,我仍然无法获得一个预定的帖子来实际触发任何东西,除了发送到WP的帖子。我不能插手这件事。
是否有人真的试图在预定的帖子发布后插手,并发生了什么事情?
更新:请原谅我打字。我的意思是发表并最初打印的帖子。这是因为我对这个话题感到沮丧。
更新编号2:我从一个特定于$old==“future”的答案中复制了代码,这可以更新meta。太棒了但是meta后面的代码(此处未显示)不会运行。至少现在我知道,当$old==“future”时,操作是有效的。我不知道为什么后面的代码不起作用,但那是另一个问题。
现在,我只能假设代码$old!=\'“发布”不会触发计划的帖子,必须指定“未来”。我会记下答案的。
最合适的回答,由SO网友:Frank P. Walentynowicz 整理而成
使用publish_future_post
行动挂钩。与Codex所说的相反,它并没有被弃用,它可以与WordPress 4.8.2一起使用。您的代码应为:
function my_test_future_post( $post_id ) {
update_post_meta( $post_id, \'hook_fired\', \'true\' );
}
add_action( \'publish_future_post\', \'my_test_future_post\' );
已测试!
如果您担心publish_future_post
不推荐使用挂钩,请使用transition_post_status
挂钩:
function my_test_future_post( $new, $old, $post ) {
if ( $post->post_type == \'post\' && $new == \'publish\' && $old == \'future\' )
update_post_meta( $post->ID, \'hook_fired\', \'You bet!\' );
}
add_action( \'transition_post_status\', \'my_test_future_post\', 10, 3 );
测试
functions.php
和插件。
SO网友:FluffyKitten
Update:
现在您已经更改了问题(并使我原来的答案看起来完全错误!):
我没有使用挂钩future\\u to\\u publish,但我成功地使用了transition_post_status
操作(也在Codex page) 检测状态更改。
类似的事情以前也曾对我起过作用:
add_action( \'transition_post_status\', \'my_status_change\', 10, 3 );
function my_status_change( $new_status, $old_status, $post ) {
if ($old_status=="future" && $new_status=="publish"){
// do stuff....
}
}
我想你可能弄错了两个钩子?这个
Codex 指以下挂钩:
- {old_status}_to _{new_status} Hook当post从{old\\u status}转换到{new\\u status}时,将执行{old\\u status}到{em>{new\\u status}的{old\\u status}操作。
在您的情况下:future\\u to发布(future\\u to post不会起作用,因为post不是状态
- {status}_{post_type} Hook当类型为{post\\u type}的帖子从任何其他状态转换到{status}时,将执行{status}{post\\u type}操作。
在您的情况下:这将是publish\\u post(我想这可能是您将它们混淆的地方?)
我假设您只希望future发布转换,请尝试:
add_action( \'future_to_publish\', \'future_publish\' );