我想创建一个名为ajax_controller的PHP文件,它将处理所有的ajax请求。然而,当我访问该页面时,我被重定向到404(可能是因为它正在搜索页面)。
我如何告诉wordpress ajax_controller不是一个页面,不应该呈现enqueue_header(), enqueue_footer()
函数。我应该可以通过url / ajax_controller访问它,但它应该是一个空页。
add_action('wp_ajax_send_email', 'send_email_callback');
add_action('wp_ajax_nopriv_send_email', 'send_email_callback');
function send_email()
{
//do something;
}
var fruit = 'Banana';
// This does the ajax request
$.ajax({
url: ajax_controller,
data: {
'action':'send_email',
'fruit' : fruit
},
success:function(data) {
// This outputs the result of the ajax request
console.log(data);
},
error: function(errorThrown){
console.log(errorThrown);
}
});
答案 0 :(得分:1)
步骤1:在插件目录中创建一个名为my-ajax-handler
的文件夹。
第2步:在该目录中创建两个文件:my-ajax-handler.php
和my-ajax-handler.js
第3步:在my-ajax-handler.php
中,粘贴以下代码:
<?php
/*
** Plugin Name: My Ajax Handler
** Description: A simple plugin to handle all my ajax.
** Version: 1
** Author: Me
*/
class MyAjaxHandler
{
public static $file, $dir, $url;
public function __construct()
{
self::$file = __FILE__;
self::$dir = dirname(self::$file);
self::$url = plugins_url('', self::$file);
add_action('init', array($this, 'register'));
add_action('wp_enqueue_scripts', array($this, 'js'));
add_action('wp_ajax_my_ajax_handler', array($this, 'ajax'));
add_action('wp_ajax_nopriv_my_ajax_handler', array($this, 'ajax'));
}
public function register()
{
wp_register_script('my-ajax-handler', self::$url.'/my-ajax-handler.js', array('jquery'));
}
public function js()
{
$vars = array('ajaxurl' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('my-ajax-handler-nonce'));
wp_enqueue_script('my-ajax-handler');
wp_localize_script('my-ajax-handler', 'my_ajax_handler', $vars);
}
public function ajax()
{
if(!wp_verify_nonce($_POST['nonce'], 'my-ajax-handler-nonce')) die('Nonce failed.');
$response = 'An '.$_POST['fruit'].' a day keeps the doctor away';
header("Content-Type: application/json");
echo json_encode($response);
exit;
}
}
new MyAjaxHandler;
第4步:在my-ajax-handler.js
中,粘贴以下代码:
jQuery(document).ready(function($)
{
var fruit = 'apple';
$.post
(
my_ajax_handler.ajaxurl,
{
action : 'my_ajax_handler',
fruit : fruit,
nonce : my_ajax_handler.nonce
},
function(response)
{
console.log(response);
}
);
});
步骤5:保存文档并激活插件。