it-swarm.com.de

$ Comments außerhalb der Kommentarvorlage abrufen

Ich habe eine Ajax-Anfrage, die an "template_redirect" angehängt ist (die Ajax fordert die URL des Posts an), und ich möchte nur die Kommentar-Vorlage 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: "<?php echo get_permalink($post->ID); ?>",
        type: "GET",
        data: ({
          get_my_comments: offset
        }),
        success: function(data){
          list.append(data);
        }
      });
    });

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

2
Alex

$comments oder $wp_query->comments wird durch comments_template() initialisiert, die Sie in Ihrer Vorlagendatei aufrufen, wenn Sie die Kommentarsubvorlagendatei laden möchten. Zum Zeitpunkt von template_redirect ist es also noch nicht initialisiert. Wie Chris sagte, sollten Sie get_comments() anrufen und den post_id Ihres aktuellen Beitrags übergeben.

Wenn Sie AJAX Anrufe tätigen, auch nicht von Seiten des Administrators , können Sie wp-admin/admin-ajax.php verwenden und spezielle Aktions-Hooks verwenden. Dies verkürzt die üblichen Post-Abfragen, die Sie sowieso nicht benötigen.

0
Jan Fabry

Ich benutze diese Funktion, um Vorlagen mit 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 Funktion zum Laden einer bestimmten Vorlage. Grundsätzlich müssen Sie jedoch die Kommentare selbst abrufen, um sie zur Liste hinzuzufügen.

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

Ich verwende die globalen $ -Daten, um alles zu speichern, was ich in der Vorlage rendern möchte.

0
Chris