我可以区分“永久删除帖子”和“清空垃圾”,并相应地为它们做点什么吗?

时间:2019-05-03 作者:Syd McArdle

我目前正在开发一个插件,其自定义帖子类型为“经销商位置”。(与问题无关,只是一点背景)

当一篇帖子被扔进垃圾箱并按下“永久删除”时,我需要从每个用户中删除这篇meta。

当一篇或多篇帖子被放入垃圾箱并按下“清空垃圾箱”时,我需要浏览被删除的每个位置并做一些事情。

我有一个非常基本的函数,只是为了测试它现在何时运行,因为我有所有其他的坚果&;螺栓(删除用户元等)已解决..:

public function wcmdl_remove_deleted_location_users(){

    die;
} 
我正在使用的操作是..:

$this->loader->add_action(\'before_delete_post\', $plugin_admin, \'wcmdl_remove_deleted_location_meta\');
我也尝试过使用挂钩“delete\\u post”,在这两种情况下,函数都会在预期的情况下激发。但是,它同时触发“永久删除”和“清空垃圾桶”。

在这个例子中,我是否可以使用某种钩子或if语句来区分大规模删除和单次删除?如果没有,是否可以根据按下的按钮,通过ajax/js传递一些值,并通过If/else语句来确定函数中采取的操作?

1 个回复
最合适的回答,由SO网友:Syd McArdle 整理而成

正如leymannx在评论中指出的,“delete\\u post”钩子实际上处理了我正在寻找的两种情况,因为它似乎知道在单击“清空垃圾”时运行“for each post deleted,do x”,在单击“delete post permanly”时也会运行“do x”!

我的最终代码看起来像..:

    public function wcmdl_remove_deleted_location_users(){

      $currentpost    = get_the_ID();
      $parentid       = wp_get_post_parent_id( $currentpost );

      if( get_post_type() == \'dealer_location\' ) {
        //do stuff involving $currentpost and $parentid here...
      }
    }
请记住,这是在标准插件样板格式中使用的,而不是直接在函数中使用。子主题的php文件,此挂钩放置在“includes>class-[插件名称].php”文件中..:

        $this->loader->add_action(\'delete_post\', $plugin_admin, \'wcmdl_remove_deleted_location_users\');
如果你想通过你的功能做同样的事情。php,其结构将改为:

add_action(\'delete_post\', \'wcmdl_remove_deleted_location_users\');