Intereting Posts
Крюк после создания сообщения и извлечения информации из этого сообщения сразу Изменение размера изображения на домашней странице (категория продукта) Не удается получить доступ к разделу администрирования WordPress с помощью MAMP wp_update_post meta вызывает 500 ошибок Можно создать образы заполнителя в редакторе WordPress, которые можно щелкнуть (должен вызывать загрузчик)? Я хочу получить персонализированный пост с идентификатором таксономии Настроить максимальный предел размера загрузки изображения Включить загрузку пользовательского логотипа, если логотип отсутствует в заголовке Как мне запрашивать авторизацию / логин для просмотра определенного набора сообщений / страниц? Удаление пользовательских сообщений и метаданных при удалении $ Wpdb-> prepare не создает подготовленный оператор, который я могу выполнить несколько раз? Почему WordPress добавляет тему не перечислить конкретную тему? WordPress 3.9 Обновление базы данных Бесконечная петля Добавить теги в пользовательский тип сообщения без ссылки меню wp_verify_nonce () через REST всегда возвращает false

WP_Comment_Query разбиение на страницы, вникание в неизвестное

Я нацелен на разбиение на страницы WP_Comment_Query () . Похоже, что это либо табу, либо нет жизнеспособной информации об этом в Интернете , а не о чем-либо.

Зачем? Является ли это возможным? Если да, то как ?

Solutions Collecting From Web of "WP_Comment_Query разбиение на страницы, вникание в неизвестное"

Да, это возможно, но это немного боль.

Если посмотреть на страницу codex , только аргументы примечания – это number и offset .

Нам нужны эти два, чтобы создавать страницы с разбивкой по страницам.

Сначала мы устанавливаем параметр $paged , который является текущей страницей:

 $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1; 

Затем количество комментариев для отображения:

 $number = 3; 

После этого вычислите смещение (где запрос начинает вытягивать комментарии):

 $offset = ( $paged - 1 ) * $number; 

Поместим их все в переменную аргументов:

 // arguments to filter comments $args = array( 'number' => $number, 'offset' => $offset, 'paged' => $paged ); 

Теперь давайте нажмем на запрос и прокрутим его:

 // the query $the_query = new WP_Comment_Query; $comments = $the_query->query( $args ); // Comment Loop if ( $comments ) { foreach ( $comments as $comment ) { echo '<p>' . $comment->comment_content . '</p><br><br>'; } } else { echo 'No comments found.'; } 

Отлично. Теперь мы можем проверить, чтобы добавить /page/2 в строку URL, чтобы проверить, работает ли она, и что она делает.

Единственное, чего не хватает, это добавить ссылки на страницы, например next_posts_link() .

Проблема в том, что я не нашел способ получить max_num_pages . В простой WP_Query обычно работает следующее:

 $the_query->max_num_pages 

Но здесь это не работает. Не зная максимального количества страниц, мы не можем правильно создавать наши ссылки для разбивки на страницы. Обратите внимание, что count($comments) даст нам только общее количество комментариев на странице ( $number ).

Лично я исправил это, вычислив максимальные страницы по пользовательскому запросу, на который я нацелился. Я хотел получить общее количество комментариев по идентификатору пользователя. Поэтому я использовал этот номер следующим образом:

 $maximum_pages = $user_total_comments / $number; 

Это работает в моем случае, но нам определенно нужен способ получить max_num_pages . Надеюсь, с этим ответом это вдохновит кого-то решить окончательный бит . По крайней мере, у нас есть намного больше информации о разбиении на страницы с помощью wp_comment_query() здесь, чем где-либо еще.

Обновить

Таким образом, оставшаяся проблема заключалась в отсутствии max_num_pages . Один из способов решить это – count() возвращенный массив сообщения и проверить, совпадает ли он с $number (то, что вы задали в ключевом массиве number ), см. Ниже:

 $tot_returned_comments = count($comments); if ($number == $tot_returned_comments) { echo '<a href="/comments/page/' . $nextpage . '">Next</a>'; } 

Это работает во всех случаях, кроме того, если на последней странице указано то же количество сообщений, что и в переменной $number . Итак, если вы установите $number to 15, а ваша окончательная страница с разбивкой на страницы имеет 15 результатов, тогда отобразится следующая кнопка.

Теперь, если вы не заботитесь о производительности, вы можете просто запустить два запроса. Там, где вы не ограничиваете результаты и просто count() результаты и используете это значение для значения max_num_pages .

Хотя это не решает проблему нехватки max_num_pages , этого должно быть достаточно, чтобы вы оказались на ногах с полностью работающей wp_comments_query() для wp_comments_query() .

Альтернативный способ справиться с этой проблемой – использовать paginate_links () с get_comments () (или любым подобным запросом). В частности, чтобы получить эквивалент max_num_pages, вы можете использовать встроенную функцию wp_count_comments ().

Таким образом, чтобы получить максимальное количество страниц, вы должны сначала подсчитать количество всех комментариев, которые вы хотите. Предполагая, что вам не нужны неутвержденные комментарии:

 $all_comments = wp_count_comments(); $all_comments_approved = $all_comments->approved; 

Проще всего делить $ all_comments_approved на количество комментариев на страницу. Итак, с желаемыми «n» комментариями на странице:

 //Adding one at the end as simple way of rounding up. $max_num_pages = intval( $all_comments_approved / $comments_per_page ) + 1; 

(Значение $ comments_per_page должно быть предварительно установлено как> 0 и также используется в основном запросе комментария – см. Ниже).

Полная функция разбиения на страницы будет выглядеть примерно так: в зависимости от других деталей. (Например: иногда опция «base» будет более сложной из-за наличия переменных запроса в URL-адресе. Мне пришлось использовать preg_replace, чтобы обойти эту проблему в одном приложении.)

 $current_page = max(1, get_query_var('paged')); echo paginate_links(array( //check codex for how to work with get_pagenum_link and variations 'base' => get_pagenum_link(1) . '%_%', 'current' => $current_page, 'total' => $max_num_pages, 'prev_text' => __('&laquo; Previous'), 'next_text' => __('Next &raquo;'), 'end_size' => 2, 'mid-size' => 3 )); 

… и остальное – форматирование вывода … и основного комментария комментария. Последнее будет выглядеть следующим образом: обратите внимание, что $ comments_per_page имеет решающее значение здесь как для количества полученных комментариев, так и для вычисления смещения. Также обратите внимание, что общий размер найденного объекта ограничен числом (а также «статусом»).

 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $offset = ($paged - 1) * $comments_per_page; $comments = get_comments(array( 'status' => 'approve', 'number' => $comments_per_page, 'offset' => $offset ));