首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何高效查询多条件发布?

如何高效查询多条件发布?
EN

Stack Overflow用户
提问于 2019-04-29 09:56:01
回答 1查看 43关注 0票数 0

我有一些行动号召的帖子,我想在我的首页上显示出来。我想查询这些自定义帖子类型,并显示其中一个具有启动日期<今天的日期和到期日期>今天的日期的帖子类型。如果没有满足这些条件的,我希望显示一个没有到期日期的行动号召。

有没有一种方法可以查询所有行动号召帖子,然后随机显示满足第一个条件的帖子,如果为空,则显示第二个条件?

我已经成功地尝试了两次查询,每个条件一次(见下文)。但我想我更愿意查询数据库一次。通过这种方式,我可以根据需要添加更多的条件,而不需要进行无数的查询。或者这种方法是不明智的?

代码语言:javascript
复制
$today = date( "Ymd" );

// args
$condition1 = array(
    'posts_per_page'    => 1,
    'post_type'     => 'cta',
    'post-status'       => 'publish',
    'orderby'       => 'rand',
        'meta_query'        =>array(
            'relation' => 'AND',
            array(
                'key' => 'launch',
                'value' => $today,
                'compare' => '<'
            ),
                array(
                'key' => 'expiry',
                'value' => $today,
                'compare' => '>'
            ),
    )
);

$condition2 = array(
    'posts_per_page'    => 1,
    'post_type'     => 'cta',
    'post-status'       => 'publish',
    'orderby'       => 'rand',
    'meta_query'        =>array(
            array(
                'key' => 'launch',
                'value' => $today,
                'compare' => '<'
            ),
    )
);

// query
$cta1 = new WP_Query( $condition1 );
$cta2 = new WP_Query( $condition2 );

    if( !empty($cta1 -> have_posts()) ) :

        while( $cta1 -> have_posts() ) : $cta1 -> the_post(); global $post;

        // Display post with first condition

        endwhile; wp_reset_postdata();


    elseif( ( $cta2 -> have_posts() ) ) :

        while( $cta2 -> have_posts() ) : $cta2 -> the_post(); global $post;

        // Display post with second condition

        endwhile; wp_reset_postdata();

    endif;
EN

回答 1

Stack Overflow用户

发布于 2019-04-29 11:50:48

您可以使用高级meta query选项

代码语言:javascript
复制
$meta_query = array(
    'posts_per_page'    => 1,
    'post_type'     => 'cta',
    'post-status'       => 'publish',
    'orderby'       => 'rand',
        'meta_query'        =>array(
            'relation' => 'OR',
            array(
                'key' => 'launch',
                'value' => $today,
                'compare' => '<'
            ),
            array(
                'relation' => 'AND',
                array(
                    'key' => 'launch',
                    'value' => $today,
                    'compare' => '<'
                ),
                array(
                    'key' => 'expiry',
                    'value' => $today,
                    'compare' => '>'
                ),
            ),
    )
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55896112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档