Wp query posts between dates, but any year
Wp query posts between dates, but any year
我正在使用 ACF pro,需要查询 post 具有某些特殊 ACF 字段的特定值。
但我还需要获得任何年份的 posts,但日期应介于今天和距今天 + 30 天之间。我不能使用静态月份号,因为如果 post 在第 1 天制作,它就无法提前找到它。
这是我的初始查询,它不起作用。如果只获取特定的年份和月份,它就可以工作,但是从那个日期开始只获取 posts。
//$date_month_advance_month = ... month number of today + 30 days
//$date_month_advance_day= ... day number of today + 30 days
// args
$args = array(
'post_type' => 'my_post_type',
'posts_per_page'=> -1,
'meta_key' => 'status',
'meta_value' => 'accepted',
'date_query' => array(
'compare' => 'BETWEEN',
array(
'month' => $date_today_month,
'day' => $date_today_day,
),
array(
'month' => $date_month_advance_month,
'day' => $date_month_advance_day,
),
),
);
您可以创建自定义 query
。我很快做了一个,测试了日期,但没有测试自定义字段 status
,因为我没有。将 my_post_type
替换为您的 post 类型名称。
global $wpdb;
$query = "
SELECT * FROM {$wpdb->posts} as p
LEFT JOIN {$wpdb->postmeta} as pm
ON pm.post_id = p.ID
WHERE p.post_type = 'my_post_type'
AND pm.meta_key = 'status'
AND pm.meta_value = 'accepted'
AND REPLACE(SUBSTRING(p.post_date, 6, 10), '-', '') BETWEEN %s AND %s
GROUP BY p.ID
";
// Should replace 0301 and 0331 by variables (date('mO1') and date('m31') for example), I let you handle this.
$prepared_query = $wpdb->prepare($query, array('0301', '0331'));
$result = $wpdb->get_results($prepared_query);
foreach($result as $r) {
$cs_post = get_post($r->ID);
echo '<p>';
echo get_the_title($cs_post->ID) .'<br>';
echo get_the_date('Y-m-d', $cs_post->ID) .'<br>';
echo '</p>';
}
不确定这是否是正确的方法,但它确实有效。
我正在使用 ACF pro,需要查询 post 具有某些特殊 ACF 字段的特定值。 但我还需要获得任何年份的 posts,但日期应介于今天和距今天 + 30 天之间。我不能使用静态月份号,因为如果 post 在第 1 天制作,它就无法提前找到它。 这是我的初始查询,它不起作用。如果只获取特定的年份和月份,它就可以工作,但是从那个日期开始只获取 posts。
//$date_month_advance_month = ... month number of today + 30 days
//$date_month_advance_day= ... day number of today + 30 days
// args
$args = array(
'post_type' => 'my_post_type',
'posts_per_page'=> -1,
'meta_key' => 'status',
'meta_value' => 'accepted',
'date_query' => array(
'compare' => 'BETWEEN',
array(
'month' => $date_today_month,
'day' => $date_today_day,
),
array(
'month' => $date_month_advance_month,
'day' => $date_month_advance_day,
),
),
);
您可以创建自定义 query
。我很快做了一个,测试了日期,但没有测试自定义字段 status
,因为我没有。将 my_post_type
替换为您的 post 类型名称。
global $wpdb;
$query = "
SELECT * FROM {$wpdb->posts} as p
LEFT JOIN {$wpdb->postmeta} as pm
ON pm.post_id = p.ID
WHERE p.post_type = 'my_post_type'
AND pm.meta_key = 'status'
AND pm.meta_value = 'accepted'
AND REPLACE(SUBSTRING(p.post_date, 6, 10), '-', '') BETWEEN %s AND %s
GROUP BY p.ID
";
// Should replace 0301 and 0331 by variables (date('mO1') and date('m31') for example), I let you handle this.
$prepared_query = $wpdb->prepare($query, array('0301', '0331'));
$result = $wpdb->get_results($prepared_query);
foreach($result as $r) {
$cs_post = get_post($r->ID);
echo '<p>';
echo get_the_title($cs_post->ID) .'<br>';
echo get_the_date('Y-m-d', $cs_post->ID) .'<br>';
echo '</p>';
}
不确定这是否是正确的方法,但它确实有效。