Я пытаюсь отобразить общее количество сообщений для основных категорий в WordPress вместо отображения всех сообщений.
Как мне ограничить общее количество сообщений, отображаемых без нумерации страниц?
Следующее не работает:
function target_main_category_query_with_conditional_tags( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ( is_category(array( 45, 49 )) ) {
$query->set( 'posts_per_page', 9 );
$query->set( 'nopaging', true );
}
}
}
add_action( 'pre_get_posts', 'target_main_category_query_with_conditional_tags' );
Что плохого в использовании пагинации? Если вы хотите отобразить общее количество сообщений, но отобразить только некоторые сообщения, вам понадобятся два запроса. Один для получения количества, а другой для получения фактических сообщений с использованием порядка и ограничения (максимальное количество строк).
Этот код управляет страницей категории.
<?php
function target_main_category_query_atakanau( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_category() && $query->get_queried_object()->parent == 0 ) {
$query->set( 'posts_per_page', 2 );
$query->set( 'no_found_rows', true );
// Adds HTML to the category description:
add_filter( 'category_description', 'add_content_to_category_description_atakanau', 10, 2);
}
}
function add_content_to_category_description_atakanau( $description , $category_id) {
$total_post_count = total_posts_of_category_atakanau($category_id);
$new_description = $description . '<p>This category contains a total of '.$total_post_count.' posts.</p>';
return $new_description;
}
function total_posts_of_category_atakanau($category_id) {
$total_post_count = 0;
$subcategories = get_categories( array(
'child_of' => $category_id,
) );
foreach ( $subcategories as $subcategory ) {
$total_post_count += $subcategory->count;
}
// Add the post count of the given category itself
$main_category = get_category( $category_id );
$total_post_count += $main_category->count;
return $total_post_count;
}
add_action( 'pre_get_posts', 'target_main_category_query_atakanau' );
Условия:
! is_admin()
: запрос не для админки
$query->is_category()
: страница категории
$query->get_queried_object()->parent == 0
: Родительская категория.
Примечание: как сказал @Karl Hill, параметр nopaging
переопределяет posts_per_page
, не используйте его.
Вы пытаетесь одновременно установить «posts_per_page» и «nopaging». Если для параметра nopaging установлено значение true, он переопределит posts_per_page и отобразит все сообщения.