Вопрос или проблема
Не могу разобраться с этим.
Я пытаюсь перечислить посты для отдельных тегов в порядке возрастания на шаблоне кастомной таксономии (tag.php).
Стандартный цикл работает нормально, но в убывающем порядке. Когда я добавляю запрос, страница становится бесконечно длинной. Я предполагаю, что ‘сброс’ некорректен.
<?php $the_query = new WP_Query( array( 'orderby' => 'date','order' => 'ASC' ) ); ?>
<?php if ( $the_query->have_posts() ) : ?>
<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
<div class="container">
<?php if( has_post_thumbnail() ): ?>
<?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' ); ?>
<img src="<?php echo $image[0]; ?>">
<?php endif; ?>
<?php the_title(); ?>
<?php the_content(); ?>
<?php if( have_rows('abcde' ) ): ?>
<?php while( have_rows('abcde') ): the_row(); ?>
<p><?php single_tag_title(); ?></p>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php endwhile; ?>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
Вместо создания нового запроса, рассмотрите возможность использования существующего глобального запроса:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="container">
Затем, чтобы изменить порядок, скорректируйте глобальный объект запроса, подключившись к хуку pre_get_posts
hook:
/**
* Изменяет запрос архивов тегов для сортировки по возрастанию.
*
* @param WP_Query $query Экземпляр WP_Query (передается по ссылке).
*/
function _alter_tag_archive_query( $query ) {
if ( ! $query->is_admin && $query->is_main_query() && $query->is_tag() ) {
$query->set( 'order', 'asc' );
}
}
add_action( 'pre_get_posts', '_alter_tag_archive_query' );
Ответ или решение
Создание пользовательского шаблона для вывода записей в порядке возрастания в WordPress может быть сложной задачей, особенно если стандартное поведение WordPress не соответствует вашим ожиданиям. Когда речь идет о отображении записей по отдельным тегам в шаблоне кастомной таксономии (например, tag.php
), важно следовать правильной структуре и учитывать аспекты производительности и поддерживаемости кода.
Проблема и решение
Вы столкнулись с проблемой бесконечно длинной страницы при попытке настроить вывод записей с помощью объекта WP_Query
. Причиной этому может быть неправильная реализация сброса данных или недостаточная оптимизация запроса. Вместо создания нового запроса с WP_Query
, мы можем изменить глобальный объект запроса, что менее ресурсоемко и позволяет избежать дублирования кода.
Шаги для решения:
1. Используйте существующий глобальный запрос
Вместо того чтобы создавать новый запрос, используйте глобальный цикл:
<?php if ( have_posts() ) : ?>
<?php while ( have_posts() ) : the_post(); ?>
<div class="container">
<?php if( has_post_thumbnail() ): ?>
<?php $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'single-post-thumbnail' ); ?>
<img src="<?php echo esc_url($image[0]); ?>" alt="<?php the_title_attribute(); ?>">
<?php endif; ?>
<h2><?php the_title(); ?></h2>
<div><?php the_content(); ?></div>
<?php if( have_rows('abcde' ) ): ?>
<?php while( have_rows('abcde') ): the_row(); ?>
<p><?php single_tag_title(); ?></p>
<?php endwhile; ?>
<?php endif; ?>
</div>
<?php endwhile; ?>
<?php endif; ?>
2. Измените порядок вывода записей
Для изменения порядка вывода записей воспользуйтесь хуком pre_get_posts
, для корректировки основного запроса на странице архивов тегов:
/**
* Изменение запроса архива тегов для сортировки по возрастанию.
*
* @param WP_Query $query Объект WP_Query (передается по ссылке).
*/
function _alter_tag_archive_query( $query ) {
if ( ! is_admin() && $query->is_main_query() && $query->is_tag() ) {
$query->set( 'order', 'ASC' );
}
}
add_action( 'pre_get_posts', '_alter_tag_archive_query' );
Заключение
Реализуя данное решение, вы обеспечите оптимальный вывод записей по тегам в порядке возрастания, сохраняя совместимость с основным циклом WordPress и делая код более чистым и поддерживаемым. Использование хука pre_get_posts
позволяет гибко изменять параметры запроса, что является рекомендованной практикой в сообществе WordPress.
Такой подход гарантирует корректность работы сайта и улучшает общую продуктивность кода, минимизируя потенциал возникновения ошибок и улучшая скорость загрузки страниц.