Ajax Anruf in WordPress-Front-End

In meinem Plugin verwende ich zwei Ajax-Anrufe im Backend. das hat gut funktioniert. aber um die gleiche functionalität im Frontend bereitzustellen, habe ich die Kopie dieser beiden functionen mit einem anderen Namen geladen und mein Code ist:

in meiner Plugin-Hauptdatei:

function my_action_callback(){ global $wpdb; if (@$_POST['id']) { $daty = $wpdb->get_results("select eemail_id,eemail_content,eemail_subject from " . WP_eemail_TABLE . " where 1=1 and eemail_status='YES' and eemail_id=" . $_POST['id']); //echo "select eemail_id,eemail_content,eemail_subject from ".WP_eemail_TABLE." where 1=1 and eemail_status='YES' and eemail_id=".$_POST['id']; if (!empty($daty)) { foreach ($dat as $datt) { echo $datt->eemail_content . "_" . $datt->eemail_subject; die(); } } } } add_action('wp_ajax_nopriv_my_action', 'my_action_callback'); 

und in meinen settings.js

 function showEntryfront(id) { jQuery(document).ready(function($) { var data = { action: 'my_action', id: id }; jQuery.post(ajaxurl, data, function(response) { //alert('Got this from the server: ' + response); var n=response.split("_"); jQuery('textarea#mail_contents').text(n[0]); $('#mail_subject').val(n[1]); // jQuery('textbox#mail_subject').text(n[1]); }); }); } 

und die Plugin-Seite, die diese showEntryfront () austriggers, ist:

  Select Email subject         

Die zweite function macht dasselbe. nur die db-tabelle ist anders.

Immer noch zeigt meine Firebug-Konsole

 ReferenceError: ajaxurl is not defined jQuery.post(ajaxurl, data, function(response) { 

und der Textbereich füllt sich nicht mit den databasedaten aus der Tabelle WP_eemail_Table. Bitte beachten Sie, dass diese functionalität im wp-admin-Backend funktioniert. Ich weiß, dass der Ajax-Anruf in admin automatisch von admin-ajax.php geladen wird. aber wie kann ich das gleiche im Frontend implementieren. Irgendein Fehler in meinem Code ??

Solutions Collecting From Web of "Ajax Anruf in WordPress-Front-End"

Sie müssen das Skript mithilfe der wp_localize_script function lokalisieren. In der Admin-Seite ist ajaxurl bereits verfügbar. Aber am Anfang müssen Sie das Skript lokalisieren, um ajaxurl zu definieren.

Beispiel:

 wp_enqueue_script( 'custom-ajax-request', '/path/to/settings.js', array( 'jquery' ) ); wp_localize_script( 'custom-ajax-request', 'MyAjax', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) ); 

Es gibt tatsächlich eine integrierte Lösung im WordPress-core , um Ajax am Frontend zu verwenden! WordPress hat eine wenig bekannte, aber sehr nützliche Javascript-Bibliothek, auf die über das JS-Objekt window.wp zugegriffen werden kann:

 // In JS: var action = 'my_action'; var data = {id: 123}; var promise = window.wp.ajax.post( action, data ); promise.always(function(response) { console.log('Ajax done:', response); }); // the promise object also has other methods: // `done()` / `fail()` / `progress()` / `state()` / `abort()` 

Vorteil ist, dass dieses Objekt von WordPress Core gepflegt und genutzt wird. Sie können sich also darauf verlassen, dass es auf dem neuesten Stand ist, funktioniert und der robusteste Weg, um mit Ajax umzugehen. Beachten Sie auch, dass Sie nicht mit dem jQuery-Kram umgehen müssen …

Wenn Sie das JavaScript-Objekt window.wp im Frontend haben, müssen Sie es laden, indem Sie dieses WP- window.wp in die Warteschlange stellen:

 < ?php wp_enqueue_scripts( 'wp-utils' );