Вопрос или проблема
Я хотел бы изменить список постов в 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
.
Пример
Рассмотрим пример реализации задачи. Исходя из представленного кода вашего архива, мы можем использовать следующий подход:
- Создание кастомного запроса: Для кастомизации запроса на странице архива нам нужно создать новый экземпляр
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();
}
Применение
-
Обработка URL и выбор года: В WordPress можно настроить обработку ЧПУ (человеко-понятные урлы), и в данном случае мы полагаемся на параметр
year
из URL, который интерпретируется как текущий год выбранного диапазона. Убедитесь, что ваш сайт правильно обрабатывает этот параметр. -
Обновление шаблона архива: Перепишите ваш
archive.php
, используя выше приведённый код, чтобы он извлекал и отображал посты в соответствии с заданными временными рамками. -
Тестирование: После внесения изменений обязательно протестируйте новый функционал. Убедитесь, что все необходимые посты присутствуют на странице и отображаются корректно в соответствии с требованиями.
-
Оптимизация: Возможно, вам потребуется оптимизация, если в одной выборке получается слишком большое количество постов. В этом случае вы можете использовать параметры
posts_per_page
для ограничения числа постов выводимых за один раз или реализовать пагинацию.
Такой подход обеспечивает полный контроль над выводом данных и позволяет гибко адаптировать страницу архива согласно вашим бизнес-требованиям. Обязательно учтите возможные конфликты с существующими плагинами или темами, которые могут повлиять на вывод данных.