具有意外结果的排序比函数

我已经设置了一个查询来列出我的帖子,按某个自定义字段排序(这是我的博客中评论的个别书籍的发布日期)。


$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(); ?>

有一个问题:主页显示基于上次发布的书籍顺序的帖子,但是每个类别,研究等现在总是显示为结果,最后发布的书籍,而不尊重所要求的类别或用于研究的关键字。


为什么会发生这种情况?


奇怪的是,如果我在上面的最新一行之后添加,它将正确显示正确的结果,但第一个结果显示10倍,始终相同。<?php wp_reset_query(); ?>


当年话下
浏览 78回答 1
1回答

鸿蒙传说

将您的自定义替换为以下内容:WP_Queryset_query_var( 'orderby', 'meta_value' );set_query_var( 'orderby', 'DESC' );set_query_var( 'meta_key', 'book_release_date' );set_query_var( 'meta_type', 'NUMERIC' );听起来您有一个按类别等过滤的书籍的工作列表,现在您正在尝试进入该列表以添加.如果是这样,那么我看到一个问题:你发布的代码会失去过滤,因为你创建了一个全新的帖子循环。wp_reset_query恢复了过滤后的后循环,这一事实使我相信,我们可以简单地通过set_query_var修改此现有查询,而不是创建一个新的。orderbyWP_Query奖励:如果您在使用,请执行以下操作:pre_get_postsfunctions.phpfunction wpse139657_orderby($query){&nbsp;&nbsp; &nbsp; // Uncomment this if() statement once you confirm that the orderby works&nbsp; &nbsp; //if (is_admin() || $query->query_vars['post_type'] != 'book') return $query;&nbsp; &nbsp; $query->set( 'orderby', 'meta_value' );&nbsp;&nbsp; &nbsp; $query->set( 'order', 'DESC' );&nbsp;&nbsp; &nbsp; $query->set( 'meta_key', 'book_release_date' );&nbsp;&nbsp; &nbsp; $query->set( 'meta_type', 'NUMERIC' );&nbsp; &nbsp; return $query;}&nbsp;add_filter('pre_get_posts','wpse139657_orderby');
打开App,查看更多内容
随时随地看视频慕课网APP