为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
当年话下 2022-08-05 15:56:40
我已经设置了一个查询来列出我的帖子,按某个自定义字段排序(这是我的博客中评论的个别书籍的发布日期)。$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(); ?>
查看完整描述

1 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

将您的自定义替换为以下内容: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' );

听起来您有一个按类别等过滤的书籍的工作列表,现在您正在尝试进入该列表以添加.如果是这样,那么我看到一个问题:你发布的代码会失去过滤,因为你创建了一个全新的帖子循环。wp_reset_query恢复了过滤后的后循环,这一事实使我相信,我们可以简单地通过set_query_var修改此现有查询,而不是创建一个新的。orderbyWP_Query


奖励:如果您在使用,请执行以下操作:pre_get_postsfunctions.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');


查看完整回答
反对 回复 2022-08-05
  • 1 回答
  • 0 关注
  • 77 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信