在评论模板之外获取$评论

时间:2010-11-27 作者:Alex

我有一个连接到“template\\u redirect”(ajax请求帖子的url)的ajax请求,我只想显示评论模板:

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 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

$comments, 或$wp_query->comments, 由初始化comments_template(), 当您要加载注释子模板文件时,可以在模板文件中调用它。所以在template_redirect 它尚未初始化。正如克里斯所说,你应该打电话get_comments() 并将其传递给post_id 你现在的职位。

如果您正在进行AJAX调用,即使不是从管理端调用,you can use wp-admin/admin-ajax.php and use special actions hooks. 这将简化通常的post查询,而您无论如何都不需要这些查询。

SO网友:Chris

我使用此函数在使用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\\u注释(http://codex.wordpress.org/Function_Reference/get_comments)或者直接进行查询,然后可以如上所述呈现模板,或者使用php函数构建html。

我使用全局$数据来处理要在模板中渲染的任何内容。

结束