添付されている投稿に関係なく、all commentsを表示するページを作成したいです。それは潜在的に10,000以上のコメントを持つことになるので、私はそのページをページ付けしたいと思います。
その方法がわからないが、ここで私がこれまでに研究した機能のいくつかを紹介する。
get_comments
- post_id
が渡されなかった場合は、すべてのコメントが返されます。しかし、これらをページ分割する方法はありません(offset
とnumber
のオプションがありますが、手動で行うのは面倒ですvery)。
wp_list_comments
- これに関するドキュメントはかなり悪いですが、 ソースコードget_comments
配列を2番目の引数として渡すことで、get_comments
と組み合わせて使用した場合、すべてのコメントをループ処理できることを示唆しています。しかし、これはまだ実際にはget_comments
を使用するでしょう…それでは、コメントを入手してください。そして、それをページ付けする方法はないようです。
previous_comments_link
& next_comments_link
- これらはwp_list_comments
との組み合わせでのみ動作するようです2番目の引数なしで).
paginate_comments_links
- wp_list_comments
でのみ機能するように見えます(2番目の引数なしで)。
get_comments
でnumber
引数を使用するだけです。
$comments = get_comments(array(
'status' => 'approve',
'number' => '2'
));
wp_list_comments(array(
'callback' => 'my_rendering_function'
), $comments);
paginate_comments_links();
これはページ付けリンクを表示しません。
ここに提案された方法は: ページ付けでページに最新のコメントを表示します
$comments = get_comments(array(
'status' => 'approve'
));
wp_list_comments('per_page=2', $comments);
paginate_comments_links();
どちらもうまくいきません(最初の2つのコメントは表示されますが、ページ区切りは表示されません)。また、私はget_comments
がallのコメントをメモリにロードするのを嫌がっています。
allcommentsにページ区切りを付けるにはどうすればいいですか?
P.S。WordPress 3.4.1&PHP 5.3.2を使用しています。
たぶんあなたが逃した主なものはあなたが 設定ディスカッションサブパネル でチェックされた「ページにコメントを分割する」を持たなければならないということです。ページ付け機能では、URLの書き換えと同様に、これを設定する必要があります。
これが、あなたが求めていることをするための、完成したページテンプレートです。
<?php
/*
Template Name: All Comments
See http://wordpress.stackexchange.com/questions/63770/aggregate-comments-with-pagination
*/
get_header(); ?>
<div id="content" role="main">
<?php
# The comment functions use the query var 'cpage', so we'll ensure that's set
$page = intval( get_query_var( 'cpage' ) );
if ( 0 == $page ) {
$page = 1;
set_query_var( 'cpage', $page );
}
# We'll do 10 comments per page...
# Note that the 'page_comments' option in /wp-admin/options-discussion.php must be checked
$comments_per_page = 10;
$comments = get_comments( array( 'status' => 'approve' ) );
?>
<ol start="<?php echo $comments_per_page * $page - $comments_per_page + 1 ?>">
<?php wp_list_comments( array (
'style' => 'ol',
'per_page' => $comments_per_page,
'page' => $page,
'reverse_top_level' => false
), $comments ); ?>
</ol>
<?php # Now you can either use paginate_comments_links ... ?>
<?php paginate_comments_links() ?>
<?php # Or you can next/prev yourself... ?>
<?php if ( get_comment_pages_count( $comments, $comments_per_page ) > 1 ) : // are there comments to navigate through ?>
<nav id="comment-nav">
<div class="nav-previous"><?php previous_comments_link( __( '← Newer Comments' ) ); ?></div>
<div class="nav-next"><?php next_comments_link( __( 'Older Comments →' ) ); ?></div>
</nav>
<?php endif; ?>
</div><!-- #content -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>
あなたがグローバルにコメントページネーションを有効にしたくないなら、それはまだ可能ですが、あなたは手動で書き換えルールを追加しなければならないので、それは小さな頭痛の種です。そうすれば、WordPressは簡単なフィルタでコメントのページ付けが可能になると考えるようになります。
add_filter( 'pre_option_page_comments', '__return_true' );