将帖子移至回收站时执行的功能。


9

嗨,有一个动作可以在将帖子移到回收站时执行....我尝试了delete_post和Deleted_post。它对每个动作有效(但在每次动作之前和之后均按Codex编写)两次,并且仅当从垃圾箱删除帖子时才显示输出。示例我想向作者发送电子邮件,说明他的帖子由于某种原因已被移至回收站,并更新了一些user_meta。如果我用

add_action('deleted_post', 'emailUser');

要么

add_action('delete_post', 'emailUser');

仅当从垃圾箱中删除帖子时,此选项才有效。。。

更新:使其适用于使用

add_action('trash_post', 'emailUser');

但是函数双重执行的问题仍然存在。。。


1
在下面写下解决方案并将其标记为答案
Ashfame

它不是正确的答案,因为仍然存在函数的双重执行...
Harjeet Singh 2011年

Answers:


10

这将达到目的!

add_action('trash_post','my_trash_post_function',1,1);
function my_trash_post_function($post_id){
    if(!did_action('trash_post')){
        // do stuff
    }
}

在这里,我们添加了函数,并使用did_action防止挂钩执行多次:

http://codex.wordpress.org/Function_Reference/did_action

与往常一样,这类挂钩采取的形式{post_status}_{post_type},所以trash_posttrash_pagetrash_customposttypepublish_page


2

将帖子移至垃圾箱时,将调用一次该操作,然后在清空垃圾箱时,将再次调用该操作。

您的函数可以检查名称中是否包含带有帖子ID的选项,如果该选项不存在,则它会发送电子邮件,然后设置该选项。如果该选项存在(例如第二次被调用),则不会发送电子邮件。

请记住,然后删除该选项,这样您的数据库就不会被它们填满!

add_action( 'delete_post', 'emailUser' );

function emailUser( $postid ) {

   if ( ! get_option( 'user_emailed_' . $postid ) ) {
      // send email here
      update_option( 'user_emailed_' . $postid, 'anything' );
   } else {
      delete_option( 'user_emailed_' . $postid );
   }

}

让我知道是否可行!


您可以使用Transients API代替选项,因此您无需担心从数据库codex.wordpress.org/Transients_API
Bainternet中

谢谢西蒙,很棒。。。。不知道我为什么错过这个。。..
Harjeet Singh 2011年

Bainternet,我看到了瞬态,在我的情况下,它们与get_option非常相似,我也坚持使用get_option进行删除,因为执行也将取决于服务器性能以及删除前后的代码执行时间的计算发布可能会变得困难。
Harjeet Singh'3

根本不需要开始添加/编辑选项字段或瞬态,也无需添加额外的查询。相反,只需调用did_action来检查钩子是否已经触发。
汤姆·J·诺维尔(

1
add_action('trash_post', 'trash_post_function_name');

上面的钩子在WP 4.7.5中对我不起作用。

这就是对我有用的

add_action('wp_trash_post', 'trash_post_function_name');
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.