自定义WordPress插件调用Ajax返回0

时间:2016-04-28 15:08:29

标签: ajax wordpress

我的主文件是Bellow:

<?php
/*
Plugin Name: XYZ
*/

class GMS_SMS_Notifier {


public function __construct(){
    if (is_admin()){
        //JS
        add_action( 'admin_enqueue_scripts',array($this,'load_custom_js_scripts'));
    }
}

function load_custom_js_scripts() {
    wp_register_script( 'gms_custom', plugins_url('/assets/js/gms_custom.js', __FILE__ ),false,'1.0',true);
    wp_localize_script('gms_custom','plugin_ajax',array('ajaxurl'=>admin_url('admin-ajax.php')));
    wp_enqueue_script('gms_custom');

}

function mail_send_to(){
    global $wpdb;
    echo $_POST['recordID'].'Hello';
    die();
}   
add_action('wp_ajax_mail_send_to','mail_send_to');
add_action('wp_ajax_nopriv_mail_send_to','mail_send_to');

} // End Class GMS_SMS_Notifier

new GMS_SMS_Notifier();
看起来如下的

和JS文件gms_custom.js

$(".send_mail_btn").click(function(){
var recordids = $(this).attr("id");

    $.ajax({
        url: plugin_ajax.ajaxurl,
        type: 'POST',
        data: ({
        action: 'mail_send_to',
        recordID: recordids,
        }),
        success: function(data) {
            console.log(data);
       }
   });
});

当我将自定义函数直接放在主题的function.php中时,它运行正常,但是当它放在插件文件上时,它将无法正常工作。我做错了什么,我需要做些什么才能让它从插件中发挥作用?

2 个答案:

答案 0 :(得分:0)

我认为你没有&#34;}&#34;在添加动作之前的函数结束。

function mail_send_to(){
    global $wpdb;
    echo $_POST['recordID'].'Hello';
    die();
}

答案 1 :(得分:0)

这些add_action调用:

add_action('wp_ajax_mail_send_to','mail_send_to');
add_action('wp_ajax_nopriv_mail_send_to','mail_send_to');

需要在你的类的构造函数中,否则它们将不会执行。 0是WordPress的默认响应,因为它没有为动作定义AJAX处理程序。

要解决下面的注释,请注意当一个函数在一个类中时(即它变成一个方法),当你调用add_action这样的函数时,你会有不同的引用。最常见的&amp;引用方法的兼容方式是使用具有两个元素的数组:类的名称和方法的名称。例如:

add_action('wp_ajax_mail_send_to',array('GMS_SMS_Notifier', 'mail_send_to'));
add_action('wp_ajax_nopriv_mail_send_to',array('GMS_SMS_Notifier', 'mail_send_to'));

PHP docs for callables涵盖了将函数或方法传递给函数时可以引用函数或方法的所有不同方法。