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?
$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.
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.