我有一些名为'date'和'start_time'的自定义字段,并希望通过我的'date'自定义字段和'start_time'来订购帖子。我有以下查询-如果有人能指出我在哪里出错,那就太好了。
我的查询如下:
编辑:第二个数组可以更改为任何值-字段本身返回的值介于0000和2359之间-这是我需要在日期
之后排序的值现在我让查询返回这个
Sun 26 May - Start Time: 09005月26日星期日-开始时间:13005月26日星期日-开始时间:20005月26日星期日-开始时间:1030
但我想这样:
Sun 26 May - Start Time: 09005月26日星期日-开始时间:10305月26日星期日-开始时间:13005月26日星期日-开始时间:2000
$today = date("Ymd");
$args = array(
'post_type' => 'event',
'meta_query' => array(
array(
'key' => 'date',
'value' => $today,
'type' => 'numeric',
'compare' => '>'
),
array(
'key' => 'start_time',
'value' => array( 0, 2359 ),
'compare' => 'BETWEEN'
)
),
'orderby' => 'meta_value',
'meta_key' => 'date',
'order' => 'ASC',
'paged'=> $paged,
'posts_per_page'=> 12
);
我可以让它工作使用一个sql查询:
<?php
$querystr = "
SELECT wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2
WHERE wposts.ID = wpostmeta.post_id
AND wposts.ID = wpostmeta2.post_id
AND wpostmeta.meta_key = 'date'
AND wpostmeta2.meta_key = 'start_time'
AND wposts.post_type = 'event'
AND wposts.post_status = 'publish'
ORDER BY wpostmeta.meta_value ASC, wpostmeta2.meta_value ASC
";$pageposts = $wpdb->get_results($querystr, OBJECT);
?>
<?php if ($pageposts): ?>
<?php global $post; ?>
<?php foreach ($pageposts as $post): ?>
<?php setup_postdata($post); ?>
// STUFF
<?php endforeach; ?>
<?php endif; ?>
但是,我不能让它只返回日期大于今天的帖子。
更新2:
返回日期大于今天的帖子很简单:
<?php
$today = date("Ymd");
$eventdate = get_field('date');
?>
<?php if($eventdate > $today) : ?>
一种快速(和尴尬)的方法是将您的start_time自定义字段更改为一个包含日期和时间的长数字:
YYYYMMDDhhmm
然后,如这里所示:
query_posts($query_string.'&meta_key=start_time&orderby=meta_value');
我设法解决它使用sql查询-不理想,但它的工作
<?php
$querystr = "
SELECT wposts.*
FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta, $wpdb->postmeta wpostmeta2
WHERE wposts.ID = wpostmeta.post_id
AND wposts.ID = wpostmeta2.post_id
AND wpostmeta.meta_key = 'date'
AND wpostmeta2.meta_key = 'start_time'
AND wposts.post_type = 'event'
AND wposts.post_status = 'publish'
ORDER BY wpostmeta.meta_value ASC, wpostmeta2.meta_value ASC
";$pageposts = $wpdb->get_results($querystr, OBJECT);
?>
<?php if ($pageposts): ?>
<?php global $post; ?>
<?php foreach ($pageposts as $post): ?>
<?php setup_postdata($post); ?>
// STUFF
<?php endforeach; ?>
<?php endif; ?>
您可以尝试添加date('h:i:s');