请avoid the use of require(\'../../../wp-load.php\'); and things like that 如其他答案所示。您应该始终使用Wordpress AJAX方式。这真的很简单,您将在PHP脚本中加载所有Wordpress引擎。
只有三个考虑因素:
你必须send the ajax request to ...wp-admin/admin-ajax.php. ajaxurl是一个javascript变量always defined in the admin area 并且它包含指向管理ajax的正确url。当前Wordpress安装中的php文件。您可以在管理区域的javascript中直接使用ajaxurl。我看到您将ajax请求发送到不同的URL
在发送的数据中you have to inclue the action var. action var包含插件/主题之前注册的PHP函数的名称。此函数将处理ajax请求。我已经阅读了您的代码,您在PHP中定义了ajax函数,但javascript中缺少了该操作下面的例子是the admin area 正如您所问的管理区。在前端有点不同,但仍然很容易;如果您需要一个在前端发出ajax请求的示例,只需说,我就会发布它示例:
在PHP(插件/主题)中:
add_action(\'wp_ajax_my_action\', \'my_ajax_action_function\');
function my_ajax_action_function(){
$response = array();
if ( ! empty($_POST[\'param\'] ) ) {
$response[\'response\'] = "I\'ve get the param and its value is " . $_POST[\'param\'] . \' and the plugin url is \' . plugins_url();
} else {
$response[\'response\'] = "You didn\'t send the param";
}
header( "Content-Type: application/json" );
echo json_encode($response);
// Don\'t forget to always exit in the ajax function.
exit();
}
您的后端javascript应该是这样的(请记住,ajaxurl总是由Wordpress在管理区域中定义):
jQuery.ajax({
type: "POST",
url: ajaxurl,
data: { action: \'my_action\' , param: \'st1\' }
}).done(function( msg ) {
alert( "Data Saved: " + msg.response );
});