【发布时间】:2015-10-09 15:37:20
【问题描述】:
我需要构建一个 WP_Query 来通过一些高级自定义字段过滤帖子。以下要点描述了所需的功能:
- 今天大于 start_date 并且小于 'end_date'。
- 如果今天是“开始日期”,则测试时间是否大于“开始时间”。
- 如果今天是“end_date”,如果时间小于“end_time”,则发送文本。
- 仅检索按自定义字段“优先级”排序的第一个帖子。
我正在努力构建典型的 WHERE 分句,例如:
SELECT * FROM x WHERE (
( 'start_date' < today AND 'end_date' > today )
OR
( 'start_date' = today AND 'start_hour' < now )
OR
( 'end_date' = today AND 'end_hour' > now )
)
ORDER BY y
LIMIT 0,1;
我已经考虑了一段时间,我认为可以通过在 WP_Query args 中嵌套 meta_queries 来实现...没有用(请参阅下面的 args)。
$now_date = date('Ymd');
$now_time = date('Hi');
$args = array(
'post_type' => 'post',
'cat' => 4, /* Bulletin */
'posts_per_page' => 1,
'post_parent' => 0,
'post_status' => 'publish',
'meta_query' => array(
'relation' => 'OR',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'bu_from',
'compare' => '<',
'value' => $now_date,
'type' => 'NUMERIC'
),
array(
'key' => 'bu_to',
'compare' => '>',
'value' => $now_date,
'type' => 'NUMERIC'
)
),
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'bu_from',
'compare' => '=',
'value' => $now_date,
'type' => 'NUMERIC'
),
array(
'key' => 'bu_from_time',
'compare' => '<=',
'value' => $now_time,
'type' => 'NUMERIC'
)
),
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'bu_to',
'compare' => '=',
'value' => $now_date,
'type' => 'NUMERIC'
),
array(
'key' => 'bu_to_time',
'compare' => '>=',
'value' => $now_time,
'type' => 'NUMERIC'
)
)
),
'meta_key' => 'bu_priority',
'orderby' => 'meta_value',
'order' => 'ASC'
);
忽略所有元查询的请求:
/* Taken from var_dump($the_query); */
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
INNER JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id)
INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
WHERE 1=1
AND wp_posts.post_parent = 0
AND ( wp_term_relationships.term_taxonomy_id IN (4) )
AND wp_posts.post_type = 'post'
AND ((wp_posts.post_status = 'publish'))
AND (wp_postmeta.meta_key = 'bu_priority' )
GROUP BY wp_posts.ID
ORDER BY wp_postmeta.meta_value ASC
LIMIT 0, 1
;
【问题讨论】:
标签: advanced-custom-fields wordpress