如何同时使用 tax_query 和 meta_query?
How do I use tax_query and meta_query together?
我有一个名为 'jobs' 的自定义 post 类型,其分类法名为 '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'
)
)
));
你很接近!我想你只需要从 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' => '='
)
)
));
完整的工作代码以防将来对任何人有帮助
$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' => '='
)
)
));
我有一个名为 'jobs' 的自定义 post 类型,其分类法名为 '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'
)
)
));
你很接近!我想你只需要从 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' => '='
)
)
));
完整的工作代码以防将来对任何人有帮助
$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' => '='
)
)
));