Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WordPress delete_post hook调用函数两次_Wordpress - Fatal编程技术网

WordPress delete_post hook调用函数两次

WordPress delete_post hook调用函数两次,wordpress,Wordpress,下面是我如何实现它的: add_action( 'delete_post', array( 'MyClassName', 'delete' ) ); 在delete函数中,我使用$wpdb->insert命令查看函数是否被调用。但是我看到$wpdb->insert命令被调用两次,在我的表中插入两行。你知道为什么会发生这样的事吗 我还尝试使用before_delete_post钩子,因为它对我来说并没有什么影响,但我得到了相同的结果 编辑: 似乎出于某种原因,对wp_posts表中的每个条目都调

下面是我如何实现它的:

add_action( 'delete_post', array( 'MyClassName', 'delete' ) );
在delete函数中,我使用$wpdb->insert命令查看函数是否被调用。但是我看到$wpdb->insert命令被调用两次,在我的表中插入两行。你知道为什么会发生这样的事吗

我还尝试使用before_delete_post钩子,因为它对我来说并没有什么影响,但我得到了相同的结果

编辑:

似乎出于某种原因,对wp_posts表中的每个条目都调用了delete函数。因此,如果文章有3个修订,删除功能将被调用为原始文章+3个修订的4倍。这真是奇怪的行为。

我找到了解决办法

您钩住delete_post或任何其他类似钩子的函数会根据需要执行任意多次。考虑到delete_post需要删除post及其所有修订,它将始终运行多次。为了避免每次WordPress从数据库中删除记录时都执行函数,您可以使用did_action$hook。此函数返回钩子执行的次数。考虑到这一点,我们可以通过将此条件放入函数中来解决多次执行问题:

if (did_action('delete_post') === 1)
{
    // execute code here
}