我想知道,只有在用户单击“保存”按钮或发布新帖子后,帖子才直接用新修订版保存,如何触发过滤器挂钩。
我的想法是替换帖子的特定部分,但我不需要在每次发送ajax自动保存请求或创建新帖子草稿时触发过滤器。
我现在正在使用此筛选器(不要注意var\\u dump)
add_filter(\'wp_insert_post_data\', array(&$this, \'filter_post_data\'), \'99\', 2);
function filter_post_data($data, $postarr)
{
var_dump($data);
var_dump($postarr);
exit;
// Change post title
return $data;
}
每次将post数据保存到数据库时,都会触发此过滤器。但我只需要在用户单击“保存”按钮时触发此过滤器。
我怎样才能做到这一点?我是否应该检查帖子类型、状态。。。在里面postarr
确定是否要保存此帖子。如何确保在用户单击时保存帖子?(什么论据可以告诉我这一点)
谢谢
最合适的回答,由SO网友:jgraup 整理而成
看看\'save_post\'
和Post Status Transitions.
save_post
是在创建或更新帖子或页面时触发的操作,可以从导入、帖子/页面编辑表单、xmlrpc或通过电子邮件发布。帖子的数据存储在$\\u post、$\\u GET或全局$post\\u数据中,具体取决于帖子的编辑方式。例如,快速编辑使用$\\u POST。由于此操作在帖子保存后立即触发,因此您可以使用get\\u post($post\\u id)轻松访问此帖子对象
修订功能可以告诉您这是否是自动保存:wp_is_post_revision()
/ wp_get_post_revisions()
.
function wpse_save_post( $post_id ) {
// If this is just a revision, so we can ignore it.
if ( wp_is_post_revision( $post_id ) )
return;
$post_title = get_the_title( $post_id );
$post_url = get_permalink( $post_id );
$subject = \'A post has been updated\';
$message = "A post has been updated on your website:\\n\\n";
$message .= $post_title . ": " . $post_url;
}
add_action( \'save_post\', \'wpse_save_post\' );
在这里,您可以使用保存后更新帖子内容
wp_update_post()
. 但一定要避免无限循环。
function my_function( $post_id ){
if ( ! wp_is_post_revision( $post_id ) ){
// unhook this function so it doesn\'t loop infinitely
remove_action(\'save_post\', \'my_function\');
// update the post, which calls save_post again
wp_update_post( $my_args );
// re-hook this function
add_action(\'save_post\', \'my_function\');
}
}
add_action(\'save_post\', \'my_function\');