通过meta键对wp_query进行优先级排序

时间:2018-12-19 06:53:44

标签: wordpress custom-fields

我有两个用于视图的自定义字段。 weekly_viewsall_views。每周视图自定义字段每周都会删除,并从0开始重新计数。因此,我现在想要实现的是按每周视图显示12个帖子,但是当删除自定义字段时,除非这些帖子中有视图,否则查询将不显示任何内容。我想在这里显示all_views的帖子,而不是没有帖子。

我的查询如下,但无法正常运行。简而言之,我要实现的是通过weekly_views自定义字段显示帖子,但是如果没有帖子,则按all_views显示帖子。另外,如果weekly_views的帖子少于12条,则首先显示weekly_views帖子,然后显示all_views的其余帖子。

$args = array(
    'post_type'  => array( 'custom_post_type_1', 'custom_post_type_2'),
    'posts_per_page' => '12',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',                  
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'weekly_views',    
        ),
        array(
            'key'     => 'all_views',
        ),
    ),
);

以上代码返回了我的帖子,但按all_views排序。


编辑

对我有用的新查询

<?php
$args = array(
    'post_type'=> array( 'custom_post_type1', 'custom_post_type2'),
    'posts_per_page' => '12',
    'meta_key' => 'weekly_views',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    );
$the_query = new WP_Query( $args );
if ($the_query->post_count < 12) {
$countweeklyposts = $the_query->post_count;
$showallpostscount = 12 - $countweeklyposts;
$args2 = array(
    'post_type'=> array( 'band', 'artist'),
    'posts_per_page' => $showallpostscount,
    'meta_key' => 'all_views',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    );

$the_query2 = new WP_Query( $args2 );
}

?>

<?php while ($the_query -> have_posts()) : $the_query -> the_post(); ?>

//Code to show posts goes here

<?php
endwhile;
wp_reset_postdata();
?>

<?php while ($the_query2 -> have_posts()) : $the_query2 -> the_post(); ?>

//Code to show posts goes here

<?php
endwhile;
wp_reset_postdata();
?>

1 个答案:

答案 0 :(得分:-1)

如果您想要更少的代码,您也可以这样做

<?php
    $args = array(
        'post_type'=> array( 'custom_post_type1', 'custom_post_type2'),
        'posts_per_page' => '12',
        'meta_key' => 'weekly_views',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
    );
    $args2 = array(
        'post_type'=> array( 'band', 'artist'),
        'posts_per_page' => '12',
        'meta_key' => 'all_views',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
    );
    if ($query->post_count > 12) {
        $query_args = $args;
    }else if($query->post_count < 12){
        $query_args = $args2;
    }

    $query = new WP_Query( $query_args );

    while ($query -> have_posts()) : $query -> the_post(); 
    //Code to show posts goes here

    endwhile;
    wp_reset_postdata();
?>