Laden Sie Kommentare per Post bei Klick mit AJAX

Ich arbeite an einem Thema, das einen Schieberegler verwendet, um Blogposts anzuzeigen. Unterhalb des Schiebereglers befindet sich eine Seitennummer, die wie eine Zeitleiste mit einem Datum anstelle einer Seitennummer angezeigt wird und den entsprechenden Blogpost aufruft. Ich möchte die Kommentare für jeden Post anzeigen, aber außerhalb des Sliders. Also, ich habe diesen Code in meinem Header, um die Kommentare mit Ajax zu bekommen:

:: EDITED (jetzt mit wp-admin / admin-ajax.php zur Bearbeitung der Anfrage, wie unten beschrieben) ::

$(".timeline-entry a").live('click', function(event) { event.preventDefault(); $.ajax({ url: '', type: 'POST', action: 'do_ajax', data: { 'post_id' : '72' //using a post id that I *know* has comments, for testing! }, dataType: "json", success: function(myResult) { alert(myResult); }, error: function(error) { alert(error); } }); }); 

In meinen functionen.php:

 add_action('wp_ajax_nopriv_do_ajax', 'retrieve_comments'); add_action('wp_ajax_do_ajax', 'retrieve_comments'); function retrieve_comments(){ $myPost = $_REQUEST['post_id']; $output = get_comments('post_id=' + $myPost); $output = json_encode($output); if(is_array($output)){ print_r($output); } else{ echo $output; } die; }; 

Ich bekomme 0 in der Alarmbox … das bedeutet, dass der Ajax passiert, aber etwas stimmt nicht mit meiner PHP-function, richtig?

Danke für Ihre Hilfe.

Solutions Collecting From Web of "Laden Sie Kommentare per Post bei Klick mit AJAX"

Aha, ich denke meine Syntax war falsch.

Ich habe mich verändert:

  action: 'do_ajax', data: { 'post_id' : '72' //using a post id that I *know* has comments, for testing! }, 

zu:

 data: { 'action' : 'do_ajax', 'post_id' : '72' }, 

und ich bekomme die richtige Antwort von der console.log die zeigt:

 [{"comment_ID":"1","comment_post_ID":"1","comment_author":"Mr WordPress","comment_author_email":"","comment_author_url":"http:\/\/wordpress.org\/","comment_author_IP":"","comment_date":"2012-08-28 19:55:20","comment_date_gmt":"2012-08-28 19:55:20","comment_content":"Hi, this is a comment.
To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.","comment_karma":"0","comment_approved":"1","comment_agent":"","comment_type":"","comment_parent":"0","user_id":"0"},{"comment_ID":"2","comment_post_ID":"72","comment_author":"Mr WordPress","comment_author_email":"","comment_author_url":"http:\/\/wordpress.org\/","comment_author_IP":"","comment_date":"2010-07-11 12:10:08","comment_date_gmt":"2010-07-11 12:10:08","comment_content":"Hi, this is a comment.
To delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.","comment_karma":"0","comment_approved":"1","comment_agent":"","comment_type":"","comment_parent":"0","user_id":"0"}

So jetzt bin ich herauszufinden, wie man am besten mit dem Array umgehen 🙂

Ihre PHP-Datei wird nicht im Kontext der WordPress-Umgebung geladen, Sie haben also keinen Zugriff auf WordPress-functionen. In AJAX in Plugins in Codex finden Sie die richtige Methode für AJAX-Aufrufe in WordPress, insbesondere Ajax auf der Viewer-Facing-Seite . Trotz des Titels der Seite sollte AJAX auch in Themen behandelt werden.

EDIT – Dies ist ein gutes Tutorial (unten auf der obigen Codex-Seite verlinkt), um die WordPress AJAX-functionen zu verstehen.