我正在开发一个非常依赖AJAX调用的插件。它在WordPress的单个安装版本中运行良好,但当我将其移植到网络WP中时,我的AJAX功能停止工作(总是返回0)。
简化后,我的插件设置如下所示:
// plugin.php
/*
Plugin Name: My plugin
*/
defined( \'ABSPATH\' ) or die( \'No direct access.\' );
add_action("wp_ajax_test_ajax", "test_ajax");
add_action("wp_ajax_nopriv_test_ajax", "test_ajax");
function test_ajax() {
echo "Works";
die();
}
add_action( \'wp_enqueue_scripts\', \'cms_load_head_scripts2\' );
function cms_load_head_scripts2() {
$path = get_plugin_path();
wp_enqueue_script(\'cmsAJAX\', $path . \'js/script.js\',
array(\'jquery\'), \'1.98\' );
wp_localize_script( \'cmsAJAX\', \'myAjax\', array( \'ajaxurl\' => get_admin_ajax_path()) );
}
// script.js
(function($) {
$(document).ready( function(){
$.ajax({
type : "post",
dataType : "html",
url : myAjax.ajaxurl,
data : { \'action\' : \'test_ajax\' },
success : function(response) {
console.log( "success", response );
},
error : function(xhr, ajaxOptions, thrownError) {
}
});
插件按预期工作;内容加载、函数运行等。只是wp\\U ajax\\uActions不运行。
通过测试,我确定when I place my add_actions(\'wp_ajax_
inside the theme\'s functions.php file, the calls work as expected (即使插件文件中仍有ajax调用)。我确实需要他们都在插件虽然。
我遵循了管理ajax。通过php,通过do_action(\'wp_ajax_
呼叫-此处没有错误,它只是不运行test_ajax
行动/功能。
写了这篇文章后,我发现AJAX调用在插件中工作得很好if the plugin is activated across the entire network. 当然,只能在一个或两个网络站点上单独激活这个插件,所以我仍在试图找出在单站点对一个网络站点插件中这些ajax调用的错误。
Also
这是两个习惯
get_
我在上面使用的函数,它们只返回相应的路径。
function get_plugin_path(){ return plugin_dir_url(__FILE__); }
function get_admin_ajax_path(){ return "http://domain.com/wp-admin/admin-ajax.php"; }