Abrufen von $ -Kommentaren außerhalb der Kommentarvorlage

Ich habe eine Ajax-Anfrage an “template_redirect” angehängt (der Ajax fragt die URL des Beitrags an) und ich möchte nur die Kommentarvorlage anzeigen:

function get_comm(){ if(isset($_GET['get_my_comments'])): $offset = intval($_GET['get_my_comments']); echo $offset; // offset will be the same as "cpage" global $comments, $wp_query, $post, $id; print_r($comments); // nothing ? print_r($wp_query->comments); // nothing ?? wp_list_comments('type=comment', $comments); // same :( exit(); endif; } add_action('template_redirect', 'get_comm'); 

Der JavaScript-Teil funktioniert und es ist so:

  $("a.show-more-comments").live("click", function(){ var offset = $(this).attr('rel'); var list = $(this).closest("#comments"); $.ajax({ url: "ID); ?>", type: "GET", data: ({ get_my_comments: offset }), success: function(data){ list.append(data); } }); }); 

Das Problem ist, dass $comments oder $wp_query->comments anscheinend nicht initialisiert werden. Was mache ich hier falsch?

Solutions Collecting From Web of "Abrufen von $ -Kommentaren außerhalb der Kommentarvorlage"

$comments oder $wp_query->comments wird von comments_template() initialisiert, die Sie in Ihrer Vorlagendatei aufrufen, wenn Sie die Kommentarteilschablonendatei laden möchten. Zur Zeit von template_redirect es noch nicht initialisiert. Wie Chris sagte, solltest du get_comments() aufrufen und die post_id deines aktuellen post_id .

Wenn Sie AJAX-Aufrufe durchführen, auch nicht von der Admin-Seite, können Sie wp-admin/admin-ajax.php und spezielle wp-admin/admin-ajax.php Hooks verwenden . Dadurch werden die üblichen Postabfragen abgekürzt, die Sie sowieso nicht benötigen.

Ich benutze diese function, um Vorlagen bei der Verwendung von Ajax zu rendern

 function ajax_render( $template ) { global $data, $posts, $post, $wp_did_header, $wp_did_template_redirect, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID; ob_start(); render($template); $response = array('text' => ob_get_clean()); echo json_encode($response); exit; } 

render () ist eine benutzerdefinierte function zum Laden einer bestimmten Vorlage. Aber im Wesentlichen müssen Sie die Kommentare selbst abrufen, um sie der Liste hinzuzufügen.

Verwenden Sie get_comments (http://codex.wordpress.org/Function_Reference/get_comments) oder führen Sie eine direkte Abfrage durch und dann können Sie entweder eine Vorlage wie oben darstellen oder den HTML-Code mit einer PHP-function erstellen.

Ich benutze die globalen $ Daten, um alles zu hodnen, was ich in der Vorlage rendern möchte.