2016-04-28 6 views
0

У меня есть основной файл, как показано ниже:пользовательских плагинов WordPress вызова Ajax Возвращение 0

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

Когда я ставлю пользовательской функции непосредственно в функции темы. php работает отлично, но если поместить его в файл плагина, это не сработает. Что я делаю неправильно и что мне нужно изменить, чтобы заставить его работать и из плагина?

ответ

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. Наиболее распространенным способом ссылки на метод является использование массива с двумя элементами: именем класса и именем метода. Например:

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 охватывают все различные способы, вы можете обратиться к функции или метода при прохождении одного к функции.

+0

ваше право Спасибо: В моем случае add_action ('wp_ajax_mail_send_to', array ($ this, 'mail_send_to')); – Ravi

0

Я думаю, что у вас нет «}» в конце функции перед добавлением действия.

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

спасибо, что ответь мне. но фактический код, который уже закрывает скобки. Я обновил код – Ravi

Смежные вопросы