2016-04-28 22 views
0

I Hauptdatei als Bellow haben:Benutzerdefinierte Wordpress Plugin Anruf Ajax Return 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(); 

und JS-Datei gms_custom.js, die als Gebrüll aussieht:

$(".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); 
     } 
    }); 
}); 

Wenn ich Benutzerdefinierte Funktion setzen direkt in Funktion Thema des. php es funktioniert gut, aber wenn es auf Plug-in-Datei stattdessen wird es nicht funktionieren. Was mache ich falsch und was muss ich ändern, damit es auch vom Plugin funktioniert?

Antwort

0

Diese add_action Anrufe:

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

Notwendigkeit in Ihrer Klasse Konstruktor sein, oder sie wird nicht ausgeführt. Die 0 ist die Standardantwort von WordPress, wenn kein AJAX-Handler für eine Aktion definiert ist.

Um den folgenden Kommentar zu beachten, beachten Sie, dass wenn eine Funktion innerhalb einer Klasse ist (d. H. Die häufigste & kompatible Methode, auf eine Methode zu verweisen, besteht darin, ein Array mit zwei Elementen zu verwenden: dem Namen der Klasse und dem Namen der Methode. Zum Beispiel:

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

Die PHP docs for callables Abdeckung all die verschiedenen Möglichkeiten, wie Sie auf eine Funktion oder Methode verweisen kann, wenn man an eine Funktion.

+0

Ihr Recht aktualisiert Danke: In meinem Fall add_action ('wp_ajax_mail_send_to', Array ($ this, 'mail_send_to')); – Ravi

0

Ich denke, Sie haben nicht "}" am Ende der Funktion vor dem Hinzufügen von Maßnahmen.

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

danke für die antwort mich. aber tatsächlichen Code, der bereits Klammern schließen.Ich habe Code – Ravi