首页 > 解决方案 > 在 WP_Query 中按帖子元排序帖子时,仅返回具有元值的帖子

问题描述

我需要按评级对帖子进行排序。这段代码做得很好:

<?php
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
    $args = array (
    'post_type' => 'brands',
    'posts_per_page' => 6,
    'meta_key' => 'post_average_rating',
    'orderby'  => 'meta_value_num',
    'order'    => 'DESC',
    'paged' => $paged
    );

    $brands = new WP_Query( $args );
?>

但有一个问题。如果帖子没有评分值,则根本不会出现。如您所见,我需要在页面上显示六个帖子。但如果所有帖子都只有三个评分,则只会显示三个。我也想显示没有评分的帖子。请告诉我如何解决这个问题?

标签: wordpress

解决方案


感谢 FluffyKitten 的评论找到了解决方案。这是代码:

<?php
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array (
    'post_type' => 'brands',
    'posts_per_page' => 6,
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'meta_query' => array(
        'relation' => 'OR',
        array(
           'key'=>'post_average_rating',
           'compare' => 'EXISTS'         
        ),
        array(
            'key'=>'post_average_rating',
            'compare' => 'NOT EXISTS'         
        )
    ),
   'paged' => $paged
);

$brands = new WP_Query( $args );
?>

现在,有评分的帖子首先显示,从高到低排序,没有评分的帖子仅显示在它们之后。

参考: Orderby 元值仅返回wordpress.stackexchange.com 上具有现有元键的帖子


推荐阅读