Функция заказа с неожиданным результатом - PullRequest
1 голос
/ 16 января 2020

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

$the_query = new WP_Query(array(
    'post_type'         => 'book',
    'posts_per_page'    => 10,
    'meta_key'          => 'book_release_date',
    'meta_type'         => 'NUMERIC',
    'orderby'           => 'meta_value',
    'order'             => 'DESC'
));

Затем я позвонил это так:

<?php if( $the_query->have_posts() ): ?>
<?php if (is_category()) { ?>
<div class="page-title" align="center">
<h2 class="page-title-border">
<?php _e(' Books:'); ?> 
<?php echo single_cat_title(); ?> (<?php echo $wp_query->found_posts; ?>) 
</h2>
</div>
<?php } ?><?php while( $the_query->have_posts() ) : $the_query->the_post(); ?>

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

Почему это происходит?

Странная часть, если я добавлю <?php wp_reset_query(); ?> сразу после последней строки выше, это будет правильно показать правильный результат, но первый результат отображается 10 раз, всегда один и тот же.

1 Ответ

1 голос
/ 16 января 2020

Замените свой пользовательский WP_Query следующим:

set_query_var( 'orderby', 'meta_value' );
set_query_var( 'orderby', 'DESC' );
set_query_var( 'meta_key', 'book_release_date' );
set_query_var( 'meta_type', 'NUMERIC' );

Похоже, у вас есть рабочий список Книг , отфильтрованный по Категория , и т. Д. c., И теперь вы пытаетесь нажать на этот список, чтобы добавить orderby. Если это так, то я вижу одну проблему: ваш опубликованный код потеряет фильтрацию, потому что вы создали совершенно новую запись l oop. Тот факт, что wp_reset_query восстанавливает отфильтрованные записи-l oop, заставляет меня поверить, что мы можем просто изменить этот существующий запрос с помощью set_query_var против создания нового WP_Query.

БОНУС: Если вы используете pre_get_posts в своем functions.php, выполните следующие действия:

function wpse139657_orderby($query){ 
    // Uncomment this if() statement once you confirm that the orderby works
    //if (is_admin() || $query->query_vars['post_type'] != 'book') return $query;

    $query->set( 'orderby', 'meta_value' ); 
    $query->set( 'order', 'DESC' ); 
    $query->set( 'meta_key', 'book_release_date' ); 
    $query->set( 'meta_type', 'NUMERIC' );

    return $query;
} 
add_filter('pre_get_posts','wpse139657_orderby');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...