为什么我的DELETE_POST挂钩被调用两次

时间:2014-07-24 作者:Alternatex

我是如何实现它的:

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

我还尝试使用before\\u delete\\u post挂钩,因为这对我来说并没有什么影响,但我得到了相同的结果。

编辑:

似乎出于某种原因,为wp\\u posts表中的每个条目调用了delete函数。因此,如果帖子有3个修订,删除功能将被调用4次(原始帖子+3个修订)。这真是奇怪的行为。

2 个回复
最合适的回答,由SO网友:Alternatex 整理而成

我找到了解决办法。

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

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

SO网友:HU ist Sebastian

如果插件使用类,则必须添加如下操作:

add_action( \'delete_post\', array( $this, \'delete\' ) );
快乐的编码,

Kuchenundkakao

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register