Как изменить отображение сообщений в archive.php?

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

Я хотел бы изменить список постов в archives.php следующим образом.
Когда нажата определенная ссылка в выпадающем списке архивов, страница архива должна отображать посты с мая по декабрь того года, плюс с января по апрель следующего года.

Например, если я выбрал в выпадающем списке архивов 2015… Страница архива http://domainname.xyz/2015/ отобразит все посты из базы данных, начиная с мая 2015 до декабря 2015, а также с января 2016 до апреля 2016. Это необходимо для отображения постов за календарный год.

В текущем архиве wp у меня есть такой код постов:

// Запуск цикла.
        while ( have_posts() ) : the_post();

            /*
             * Включить шаблон, специфичный для формата поста.
             * Если вы хотите переопределить это в дочерней теме, тогда включите
             * файл content-___.php (где ___ - это имя формата поста) для использования.
             */
            get_template_part( 'content', get_post_format() );

        // Конец цикла.
        endwhile;

Это зависит от того, как устроен ваш archives.php.

Вы можете использовать встроенную функцию wp_get_archives() для получения постов за последние 12 месяцев:

<?php
wp_get_archives(
    array(
        'type' => 'monthly',
        'limit' => 12
    )
);

как описано в Codex.

Или вы можете изменить WP_Query с помощью параметра 'date_query':

<?php
$args = array(
    'date_query' => array(
        array(
            'after'     => strtotime("-1 year"), // год назад
            'before'    => strtotime("now");, // текущий момент
            'inclusive' => true, // false для исключения первого и последнего дня
        )
    )
);
$query = new WP_Query( $args );

также как описано там.

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

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

Теория

Основная концепция изменения отображения постов в архиве заключается в использовании механизмов WordPress для кастомизации запросов к базе данных. WordPress предоставляет мощный инструмент в виде класса WP_Query, который позволяет гибко настраивать параметры выборки постов из базы данных, применяя различные фильтры и условия.

В нашем случае нужно использовать параметр date_query, который позволяет задать временные рамки для получения постов. Этот параметр позволяет явно указать диапазоны дат, в пределах которых необходимо найти и отобразить посты. Также можно использовать функцию wp_get_archives(), но для более точного управления выборкой данных предпочтительнее WP_Query.

Пример

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

  1. Создание кастомного запроса: Для кастомизации запроса на странице архива нам нужно создать новый экземпляр WP_Query, который будет учитывать требуемый диапазон дат. Для этого добавим массив date_query к параметрам WP_Query.
if ( have_posts() ) {
    while ( have_posts() ) : the_post();
        get_template_part( 'content', get_post_format() );
    endwhile;
} else {
    // Определение текущего выбранного года
    $selected_year = get_query_var('year');

    // Задание начала и конца требуемых периодов
    $start_date_current_year = "$selected_year-05-01";
    $end_date_current_year = "$selected_year-12-31";

    $next_year = $selected_year + 1;
    $start_date_next_year = "$next_year-01-01";
    $end_date_next_year = "$next_year-04-30";

    // Параметры для WP_Query
    $args = array(
        'date_query' => array(
            'relation' => 'OR',
            array(
                'after'     => $start_date_current_year,
                'before'    => $end_date_current_year,
                'inclusive' => true,
            ),
            array(
                'after'     => $start_date_next_year,
                'before'    => $end_date_next_year,
                'inclusive' => true,
            )
        ),
        'posts_per_page' => -1, // число постов, отображаемых на странице
    );

    $query = new WP_Query( $args );

    // Проверка на наличие постов и вывод контента
    if ( $query->have_posts() ) {
        while ( $query->have_posts() ) {
            $query->the_post();
            get_template_part( 'content', get_post_format() );
        }
    }
    wp_reset_postdata();
}

Применение

  1. Обработка URL и выбор года: В WordPress можно настроить обработку ЧПУ (человеко-понятные урлы), и в данном случае мы полагаемся на параметр year из URL, который интерпретируется как текущий год выбранного диапазона. Убедитесь, что ваш сайт правильно обрабатывает этот параметр.

  2. Обновление шаблона архива: Перепишите ваш archive.php, используя выше приведённый код, чтобы он извлекал и отображал посты в соответствии с заданными временными рамками.

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

  4. Оптимизация: Возможно, вам потребуется оптимизация, если в одной выборке получается слишком большое количество постов. В этом случае вы можете использовать параметры posts_per_page для ограничения числа постов выводимых за один раз или реализовать пагинацию.

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

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

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