Получение $комментариев за пределами шаблона комментариев
У меня есть запрос ajax, подключенный к "template_redirect" (ajax запрашивает URL-адрес публикации), и я хочу отобразить только шаблон комментария:
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');
Часть javascript работает, и это выглядит так:
$("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);
}
});
});
Проблема в том, что $comments
или $wp_query->comments
, похоже, не инициализированы. Что я здесь делаю не так?
2 answers
$comments
, или $wp_query->comments
, инициализируется comments_template()
, который вы вызываете в файле шаблона, когда хотите загрузить файл подшаблона комментариев. Таким образом, на момент template_redirect
он еще не инициализирован. Как сказал Крис, вы должны позвонить get_comments()
и передать ему post_id
вашего текущего поста.
Если вы выполняете вызовы AJAX, даже не со стороны администратора, вы можете использовать wp-admin/admin-ajax.php
и использовать специальные крючки действий . Это сокращает обычные почтовые запросы, которые вам все равно не нужны.
Я использую эту функцию для визуализации шаблонов при использовании 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() - это пользовательская функция для загрузки определенного шаблона. Но, по сути, вам нужно будет самостоятельно получить комментарии, чтобы добавить их в список.
Используйте get_comments (http://codex.wordpress.org/Function_Reference/get_comments ) или выполните прямой запрос, а затем вы можете либо отобразить шаблон, как указано выше, либо создать html с помощью функции php.
Я использую глобальные данные $ для размещения всего, что я хочу отобразить в шаблон.