Шаблон пользовательского тега для перечисления записей в порядке возрастания

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

Не могу разобраться с этим.
Я пытаюсь перечислить посты для отдельных тегов в порядке возрастания на шаблоне кастомной таксономии (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.

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

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

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