【问题标题】:How do I use tax_query and meta_query together?如何一起使用 tax_query 和 meta_query?
【发布时间】:2020-03-26 21:17:10
【问题描述】:

我有一个名为“jobs”的自定义帖子类型,其分类法称为“job-status”。 我正在尝试显示具有特定税收条款(作业完成)的工作列表,这些工作没有在文件 ACF 字段类型中上传到他们的报告。

第一部分有效;我已经让它返回具有该分类的工作列表。我无法使用 meta_query 来询问该字段中是否有值。

到目前为止我的代码是;

$posts = get_posts(array(
    'post_type'         => 'jobs',
    'posts_per_page'        => -1,
    'meta_key'          => 'job_date',
    'orderby'           => 'meta_value',
    'order'             => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'job_status',
            'field' => 'slug',
            'terms' => array( 'complete' )
        ),
    ),
    'meta_query' => array (
      'relation' => 'AND',
        array (
          'key' => 'report_upload',
          'value' => '',
          'compare' => 'NOT EXISTS'
        )
    )
));

【问题讨论】:

    标签: php wordpress meta-query


    【解决方案1】:

    你已经接近了!我认为您只需要从 meta_query 中删除 'value' => '', 就可以了:

    $posts = get_posts(array(
        'post_type'         => 'jobs',
        'posts_per_page'        => -1,
        'meta_key'          => 'job_date',
        'orderby'           => 'meta_value',
        'order'             => 'ASC',
        'tax_query' => array(
            array(
                'taxonomy' => 'job_status',
                'field' => 'slug',
                'terms' => array( 'complete' )
            ),
        ),
        'meta_query' => array(
            array (
              'key' => 'report_upload',
              'compare' => 'NOT EXISTS'
            )
        )
    ));
    

    也不需要'relation' => 'AND',因为这是默认设置。

    有另一个想法,您可能需要更多类似的东西:

    $posts = get_posts(array(
        'post_type'         => 'jobs',
        'posts_per_page'        => -1,
        'meta_key'          => 'job_date',
        'orderby'           => 'meta_value',
        'order'             => 'ASC',
        'tax_query' => array(
            array(
                'taxonomy' => 'job_status',
                'field' => 'slug',
                'terms' => array( 'job-complete' )
            ),
        ),
        // check for case where key does not exist or has an "empty" value (added a relation OR for this one)
        'meta_query' => array (
            'relation' => 'OR',
            array (
              'key' => 'report_upload',
              'compare' => 'NOT EXISTS'
            ),
    
            array (
              'key' => 'report_upload',
              'value' => '',
              'compare' => '='
            )
        )
    ));
    

    【讨论】:

    • 谢谢迈克,设法结合原始代码和您的第二个答案来破解它。由于某种原因,它不喜欢 OR 关系。我把值留在了 & did 'compare' => '=' 而不是 NOT EXISTS。
    【解决方案2】:

    完整的工作代码,以防将来对任何人都有帮助

    
    $posts = get_posts(array(
        'post_type'         => 'jobs',
        'posts_per_page'        => -1,
        'meta_key'          => 'job_date',
        'orderby'           => 'meta_value',
        'order'             => 'ASC',
        'tax_query' => array(
            array(
                'taxonomy' => 'job_status',
                'field' => 'slug',
                'terms' => array( 'complete' )
            ),
        ),
        'meta_query' => array (
          'relation' => 'AND',
            array (
              'key' => 'report_upload',
              'value' => '',
              'compare' => '='
            )
        )
    ));
    

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-16
      • 2020-03-18
      相关资源
      最近更新 更多