Wordpress AJAX控制器

时间:2015-05-06 23:12:50

标签: php ajax wordpress

我想创建一个名为ajax_controller的PHP文件,它将处理所有的ajax请求。然而,当我访问该页面时,我被重定向到404(可能是因为它正在搜索页面)。

我如何告诉wordpress ajax_controller不是一个页面,不应该呈现enqueue_header(), enqueue_footer()函数。我应该可以通过url / ajax_controller访问它,但它应该是一个空页。

ajax_controller.php

add_action('wp_ajax_send_email', 'send_email_callback');
add_action('wp_ajax_nopriv_send_email', 'send_email_callback');


function send_email()
{
//do something;

}

jquery的

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);
        }
    });  

1 个答案:

答案 0 :(得分:1)

步骤1:在插件目录中创建一个名为my-ajax-handler的文件夹。

第2步:在该目录中创建两个文件:my-ajax-handler.phpmy-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:保存文档并激活插件。