Add_action(‘wp_ajax_[action name]’,myFunction)问题

时间:2011-04-14 作者:trumpetblast

我遇到了与本文描述的完全相同的问题:add_action('wp_ajax_[action name]', myfunction) problem

我设置了add\\u action(\'wp\\u ajax\\u my\\u function\\u call\',\'my\\u ajax\\u function\')。如果我在此行之后立即打印\\u r($wp\\u filter),则我的操作在$wp\\u filter数组中。

然而,当我执行jQuery时。对管理员ajax的post调用。php,我的操作已从$wp\\u过滤器中消失。我通过将其添加到wp includes/plugin的第354行来验证这一点。php:

if($tag==\'wp_ajax_my_function_call\') print_r($wp_filter);
根据上面引用的帖子中的user1567,“问题是加载顺序和add\\u操作调用的位置。”不幸的是,这并没有帮助我找到问题所在。我尝试将add\\u操作的优先级设置为99和1。两者都没有帮助。

关于可能导致这种情况的原因,或者解释为什么在某一点上肯定在$wp\\U过滤器中的操作会莫名其妙地从中消失,甚至不会被触发,还有其他想法吗?

2 个回复
SO网友:John P Bloch

对于为什么这不起作用,只有三种解释:

首先,可能有什么东西正在注销您的操作。不过,这似乎不太可能。

其次,您的代码永远不会在ajax初始化中运行。

三是wp_ajax_my_function_call 钩子从不跑。

我不会担心第一次的可能性。

至于第二个问题,只需确保您的代码在wp_loaded, 之后的任何事情(即。template_redirect, wp, pre_get_posts) 没有在ajax加载中运行。

对于第三种情况,只需确保将ajax请求发布到wp admin/admin ajax。php。

此外,如果您还没有,我建议您快速阅读一下管理ajax。php和wp设置。php。

SO网友:danblaker

我只是在我的一个插件中遇到了类似的问题(并且偶然发现了这个问题)。在我的例子中,我在admin\\u init函数中找到了一条条件语句。为了避免在每个管理页面上加载插件代码(以及javascript和CSS),我加入了以下检查:

$uri = isset($_SERVER[\'REQUEST_URI\']) ? $_SERVER[\'REQUEST_URI\'] : NULL ;
if ($uri && (strpos($uri,\'post.php\') OR strpos($uri,\'post-new.php\')) ) { 
   add_action( \'wp_ajax_my_plugin\', \'my_plugin_callback\' );
   // load scripts etc.
}
这可以很好地将我的操作添加到$wp\\u过滤器中。php页面加载。但是当AJAX脚本将其数据发布到admin AJAX时。当然,它会再次运行admin\\u init函数(因为它是针对每个管理页面加载运行的),此时URI不包含“post”。php“或”发布新内容。php’。

我将wp\\u ajax add\\u action语句移到了URI测试之外,现在它工作得很好。

结束

相关推荐

Custom Post Row Actions

我偶然发现this question 在写这个问题的时候。我有一个问题是关于这个问题的。我发现你用的是get_delete_post_link 筛选为我的操作创建一个新的url(或一个类似的函数——在任何情况下,我都会将该函数与布尔值一起使用)。唯一的问题是,I don\'t know how to capture the event now. 考虑到我在谷歌上找不到很多关于行后操作的例子,我将不胜感激-/public function _wp_filter_get_delete_post_link( $