richardb
  • 0
Новичок

Сначала последняя страница комментариев с полным количеством комментариев?

  • 0

Я использую постраничные и цепочные комментарии с:

  • 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

Share
  1. Какой код вы используете? Плагин?

    • 0
  2. Это действительно стандартное поведение WordPress. Комментарии всегда остаются на одной и той же странице комментариев, поэтому, если вы сначала покажете последнюю страницу комментариев, эта последняя страница комментариев не всегда будет иметь «полное» количество комментариев. Преимущество сохранения комментария всегда на одной и той же странице комментариев заключается в том, что URL-адрес всегда остается одним и тем же, иначе комментарий может перемещаться на другую страницу при добавлении новых комментариев.

    Но это раздражает, и мне тоже нужен обходной путь. Я не нашел (простого?) способа сделать это с помощью хуков WordPress, поэтому я сам нарезал массив комментариев, прочитав cpage переменную запроса (страница комментариев). Будьте осторожны с этой переменной, потому что WordPress будет очень полезен, чтобы изменить ее для вас, когда вы установите «первая/последняя страница комментария» на «последняя».

    Этот код находится в comments.php файле темы, потому что он считывает глобальную переменную $comments . Я не использовал обратный вызов комментария (это был очень простой код), но вы все равно можете передать только что нарезанный $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.
    
    • 0

Оставить ответ

You must login to add an answer.