How to remove an Ajax action

时间:2015-05-17 作者:Guerrilla

有一个插件正在加载ajax操作,如下所示:

add_action( \'wp_ajax_nopriv_func_name\', array( &$this, \'func_name\' ) );
add_action( \'wp_ajax_get_func_name\', array( &$this, \'func_name\' ) );
我想在我的主题中删除它们,因此我正在做:

remove_all_actions(\'wp_ajax_nopriv_func_name\');
remove_all_actions(\'wp_ajax_get_func_name\');
但它们仍然存在。我肯定是在添加了它们之后才这样做的。我将$wp\\u filter引入到范围中,并看到它们肯定是在我的代码之前设置的,之后未设置。

当您添加ajax操作时,看起来就像wordpress一样,工作方式略有不同。我认为实际操作存储在其他地方,我只是删除了它的别名,就像我在$wp\\u filter数组中查看函数名时一样4823746378642374682746func_name.

我不确定它引用的位置或删除它的步骤。

有人能帮我解释一下吗?

编辑:

我认为这些数字是因为类对象正在被传递,我猜这是类的散列。

更新时间:

这似乎是一个错误/不一致。我做了以下测试:

    add_action(\'wp_ajax_nopriv_ajax_test\', array(&$this, \'ajax_test\'));
    add_action(\'wp_ajax_ajax_test\', array(&$this, \'ajax_test\'));
    remove_all_actions(\'wp_ajax_nopriv_ajax_test\');
    remove_all_actions(\'wp_ajax_ajax_test\');
theajax_test 函数仍然可以从javascript访问,即使它在添加后立即被删除。

有人知道这些东西存放在哪里吗?

更新时间:

我在admin ajax中找到了负责的代码。php

do_action( \'wp_ajax_\' . $_REQUEST[\'action\'] );
我无法理解的一件非常奇怪的事情是,ajax请求在命中此代码之前返回。因此,这段代码似乎只是用于执行相关操作,而不是返回ajax请求。

2 个回复
SO网友:Guerrilla

我遇到的主要问题是,当ajax请求命中时,并不是所有挂钩都被加载。

我使用了以下代码:

$return = array();
foreach( $GLOBALS[\'wp_actions\'] as $action => $count )
{
    $return["message"] .= $action . ", ";
}
wp_send_json($return);
这向我展示了之前运行的挂钩,我让它工作了。

我认为删除“wp\\u-loaded”上的ajax操作可能是最好的,因为这似乎是admin ajax被命中之前的最后一个钩子。如果您在“admin\\u init”上删除,那么您将错过文件顶部的检查,尽管这可能意味着您错过了一些检查,所以最好在admin\\u init上执行。

SO网友:user209610

我猜这个问题是因为插件中的wp\\u ajax操作是在函数中的remove\\u操作之后添加的。php。

您可以使用wp\\U-loaded操作修复上述问题,因为它是在加载所有插件之后执行的

add_action("wp_loaded","after_wp_is_loaded");
function after_wp_is_loaded(){
try {
      remove_all_actions(\'wp_ajax_nopriv_ajax_test\');
remove_all_actions(\'wp_ajax_ajax_test\');

}

//catch exception
catch(Exception $e) {
  echo \'Message: \' .$e->getMessage();
}
}

结束