我目前正在开发一个插件,其自定义帖子类型为“经销商位置”。(与问题无关,只是一点背景)
当一篇帖子被扔进垃圾箱并按下“永久删除”时,我需要从每个用户中删除这篇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语句来确定函数中采取的操作?
最合适的回答,由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\');