Разное количество постов в регулярном цикле и на странице категории CPT

Вопрос или проблема

У меня есть несколько пользовательских типов записей с пользовательскими категориями – и я также использую обычную страницу записей для новостей. В данный момент я могу изменить только количество записей через Настройки > Чтение > Количество записей – но мне нужно, чтобы на страницах категорий CPT было разное количество записей. Я попробовал что-то вроде этого в functions.php:

/* Установите лимит страниц категорий на 99 */ 

function num_posts_archive_project_ie($query) {
    if (!is_admin() && $query->is_archive('expert_db') && $query->is_main_query()) {
            $query->set('posts_per_page', 99);
   }
    return $query;
}

Но безуспешно… :/
Буду признателен за любые подсказки или предложения.
С уважением! t

Вы на полпути. Всё, что вам не хватает – это правильный хуки:

add_action( 'pre_get_posts', 'num_posts_archive_project_ie' );

Хук pre_get_posts срабатывает после создания основного объекта WP_Query, но до его отправки в БД.

Ответ или решение

Для достижения разных значений количества записей на страницах категорий пользовательских типов записей (CPT) и обычных записей в WordPress необходимо правильно настроить обработчик запросов. В вашем случае вы уже сделали первый шаг, определив функцию, которая изменяет количество записей, отображаемых на странице архива пользовательского типа записи. Однако, как указал другой участник обсуждения, вам не хватает правильного хука для того, чтобы это сработало.

Рекомендации по реализации

Вот более подробное объяснение, как это сделать правильно шаг за шагом.

  1. Использование правильного хука: Поправьте ваш код, добавив хук pre_get_posts, чтобы ваше изменение вступало в силу. Этот хук позволяет изменить параметры запроса перед выполнением SQL-запроса к базе данных.

  2. Обновленная версия вашего кода:

    // Устанавливаем количество записей на страницах архивов для пользовательского типа записи
    function num_posts_archive_project_ie($query) {
       if (!is_admin() && $query->is_post_type_archive('expert_db') && $query->is_main_query()) {
           $query->set('posts_per_page', 99);
       }
       return $query;
    }
    
    // Добавляем хук изменения запроса
    add_action('pre_get_posts', 'num_posts_archive_project_ie');

Пояснение ключевых моментов:

  • Проверка контекста: Условие if (!is_admin() && $query->is_post_type_archive('expert_db') && $query->is_main_query()) гарантирует, что изменения применяются только к основному запросу архива вашего пользовательского типа записи. Это предотвращает потенциальные конфликты с другими запросами и админкой.

  • Изменение параметра ‘posts_per_page’: Вызов $query->set('posts_per_page', 99); задает количество записей, которые вы хотите отобразить на соответствующих страницах.

  • Хук pre_get_posts: Он отвечает за изменение параметров WP_Query. Следует использовать именно этот хук, поскольку он дает возможность вносить изменения до того, как запрос будет выполнен.

Дополнительные советы:

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

  • Кастомизация: Если вам нужно установить разное количество записей для других категорий или пользовательских типов записей, создайте дополнительные функции, аналогичные num_posts_archive_project_ie, и привяжите их к pre_get_posts.

  • SEO-оптимизация: Убедитесь, что структура URL и мета-теги на страницах остается оптимальной для SEO. Слишком большое количество записей на одной странице может негативно сказаться на скорости загрузки и на пользовательском опыте, что в долгосрочной перспективе отражается на позициях сайта в поисковых системах.

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

Оцените материал
Добавить комментарий

Капча загружается...