web-dev-qa-db-fra.com

Obtention de $ commentaires en dehors du modèle de commentaire

J'ai une requête ajax accrochée à "template_redirect" (l'ajax demande l'URL du message), et je souhaite afficher uniquement le modèle de commentaire:

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

la partie javascript fonctionne et c'est comme ça:

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

Le problème est que $comments ou $wp_query->comments ne semble pas être initialisé. Qu'est-ce que je fais mal ici?

2
Alex

$comments, ou $wp_query->comments, est initialisé par comments_template(), que vous appelez dans votre fichier de modèle lorsque vous souhaitez charger le fichier de sous-modèle de commentaire. Donc, au moment de template_redirect, il n'est pas encore initialisé. Comme Chris l'a dit, vous devriez appeler get_comments() et lui transmettre le post_id de votre message actuel.

Si vous passez des appels AJAX, même pas du côté administrateur, , vous pouvez utiliser wp-admin/admin-ajax.php et utiliser des opérations spéciales . Ceci raccourcit les requêtes de publication habituelles, dont vous n’avez de toute façon pas besoin.

0
Jan Fabry

J'utilise cette fonction pour rendre des modèles en utilisant ajax

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 () est une fonction personnalisée pour charger un certain modèle. Mais vous devrez essentiellement récupérer les commentaires vous-même pour les ajouter à la liste.

Utilisez get_comments (http://codex.wordpress.org/Function_Reference/get_comments) ou faites une requête directe et vous pouvez ensuite restituer un modèle comme ci-dessus ou construire le code HTML avec une fonction php.

J'utilise les données globales $ pour modifier tout ce que je veux afficher dans le modèle.

0
Chris