web-dev-qa-db-ja.com

全コメント数の最初の最後のコメントページ

ページコメントとスレッドコメントを使用します。

  • 1ページに10件のコメント
  • 最後のコメントページが最初
  • 最新のコメントが最初

合計21のコメントがある場合、最初のページにはコメントが1つしか含まれていません - 最新のコメントです。最初のページに最新の10個のコメントを常に表示するにはどうすればよいですか。

私はWordPress 3.0.3を使っています。 編集:3.1にアップグレードし、問題はまだ存在しています...

編集:私が使っているコードを追加するのを忘れていました。私はリストされたコメントのためにコールバックを使います、ここに行きます:

function mytheme_comment($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; ?>
<li <?php comment_class(); ?> id="li-comment-<?php comment_ID() ?>">
    <div id="comment-<?php comment_ID(); ?>" class="comment">

        <?php if(function_exists('hkTC_comment_title'))
            hkTC_comment_title($comment->comment_ID,'<strong class="comment-title">','</strong>');
        ?>

        <?php comment_text() ?>

        <span class="written-by">
            Skrivet av:
            <?php
            $commentAuthID = get_comment(get_comment_ID())->user_id;
            echo the_author_meta('first_name',$commentAuthID)." ";
            echo the_author_meta('last_name',$commentAuthID);
            ?>
            <em>kl. <?php echo get_comment_time('H.i'); ?>, den <?php echo get_comment_date('j F Y'); ?></em>
        </span>

        <div class="reply">
            <?php comment_reply_link(array_merge( $args, array('depth' => $depth, 'max_depth' => $args['max_depth']))) ?>
        </div>
    </div>
    <?php }

HkTC_comment_title関数は私も使っているこのプラグインからのものです: http://wordpress.org/extend/plugins/hikari-title-comments/ しかし、それは私が思うコメントの数を台無しにするべきではありません。

編集:これはコメント付きのページを表示するために使用される私のカスタムテンプレートです: http://123.writeboard.com/4x2m38ifvnkrct7l

3
Richard B

これは確かにWordPressのデフォルトの動作です。コメントは常に同じコメントページに表示されるため、最後のコメントページを最初に表示しても、その最後のコメントページに常に「全」のコメント数が表示されるわけではありません。常に同じコメントページにコメントを保存する利点は、URLが常に同じままであることです。そうしないと、新しいコメントが追加されたときにコメントが別のページに移動する可能性があります。

しかし、それは厄介です、そして私もこれに対する回避策が必要でした。私はWordPressフックでこれを行う(簡単な)方法を見つけられなかったので、cpage(コメントページ)クエリ変数を読むことでコメント配列を自分でスライスしました。 WordPressは "first/last comment page first"を "last"に設定したときにあなたに代わって 元に戻すのに非常に役立つので 、この変数に気をつけてください。

このコードはグローバル変数comments.phpを読み込むため、$commentsテーマファイルに入ります。私はコメントコールバックを使用しませんでした(それは非常に単純なコードでした)が、あなたはまだ2番目の引数として新しくスライスされた$comments_to_display配列をwp_list_comments()に渡すことができます。これがスレッド化されたコメントでどのように機能するのかわかりません(「通常の」ページ付きコメントでどのように機能するのでしょうか)。

$comments_to_display = $comments;

/*
 * Display the comments over pages, with the newest comments on the first page
 * Special in this code (not in WP by default) is that the first page will contain 5 comments,
 * and the final page can contain less comments.
 */
$comments_per_page = 5; // MAYBE: use get_option()?
$comment_page = get_query_var( 'cpage' );
$comment_this_page_start = 0;
$comment_this_page_count = $comments_per_page;
$oldest_comment_page_count = count( $comments_to_display ) % $comments_per_page;
if ( 0 == $oldest_comment_page_count ) {
    $oldest_comment_page_count = $comments_per_page;
}
if ( 1 == $comment_page ) {
    $comment_this_page_count = $oldest_comment_page_count;
} else {
    $comment_this_page_start = $oldest_comment_page_count + ($comment_page - 2) * $comments_per_page;
}
$comments_to_display = array_slice( $comments_to_display, $comment_this_page_start, $comment_this_page_count );
// You probably want to array_reverse() $comments_to_display, currently it shows the oldest on top.
// Then you should be able to pass $comments_to_display to wp_list_comments() and it will use your shorter array instead.
1
Jan Fabry