Получение $комментариев за пределами шаблона комментариев


У меня есть запрос 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, похоже, не инициализированы. Что я здесь делаю не так?

Author: Alex, 2010-11-27

2 answers

$comments, или $wp_query->comments, инициализируется comments_template(), который вы вызываете в файле шаблона, когда хотите загрузить файл подшаблона комментариев. Таким образом, на момент template_redirect он еще не инициализирован. Как сказал Крис, вы должны позвонить get_comments() и передать ему post_id вашего текущего поста.

Если вы выполняете вызовы AJAX, даже не со стороны администратора, вы можете использовать wp-admin/admin-ajax.php и использовать специальные крючки действий . Это сокращает обычные почтовые запросы, которые вам все равно не нужны.

 0
Author: Jan Fabry, 2017-04-13 12:37:46

Я использую эту функцию для визуализации шаблонов при использовании 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.

Я использую глобальные данные $ для размещения всего, что я хочу отобразить в шаблон.

 0
Author: Chris, 2010-11-27 12:20:45