首页 > 解决方案 > WordPress:pre_get_posts 动作结合 date_query 和 meta_query

问题描述

在我的 WordPress 项目中,我遇到了一些问题。

我有很多类别。这些类别有一个子类别名称新产品。

目前,我已经习惯在新产品页面pre_get_posts中获取帖子列表。如果有> 2018/1/15的帖子将进入类别页面。post_date

我想在产品中添加一个自定义复选框,如果选中时< 2018/1/15keep_product ,它将将产品保留在新产品页面中。post_date

所以我认为条件应该是post_date > 2018/1/15** OR **keep_product = 1

我尝试创建一个查询,但似乎WP_Query只对and应用AND条件。date_querymeta_query

function pre_get_posts_function($q){
  //Code in here
    $query->set('date_query', array(
        array(
           'after' => '2018/1/15'
        );
    ));

    $query->set('meta_query', array(
      array(
            'key' => 'keep_product',
            'value' => '1'
        )
    ));
}

我也尝试创建一个posts_where动作,但它忽略了类别条件。选中keep_after_60_days复选框的产品将显示在新产品页面中。

function pre_get_posts_function($q){
    //Code in here
     $query->set('date_query', array(
        array(
           'after' => '2018/1/15'
        );
    ));
    add_filter( 'posts_where', 'postmeta_new_releases',10,1);
}

function postmeta_new_releases( $where = '' ) {
    global $wpdb;
    $where .= "  OR ($wpdb->postmeta.meta_key = 'keep_product' AND $wpdb->postmeta.meta_value = 1)";   

    return $where; 
}

任何人都可以帮助我。几天后我会生气。

谢谢!!

标签: wordpressmeta-query

解决方案


推荐阅读