我有一些名为'date'和'start_time'的自定义字段,并希望按我的自定义字段'date'和'start_time'来订购帖子。我有以下问题 - 如果有人能指出我哪里出错那就太好了。
我的查询如下:
编辑:第二个数组可以更改为任何内容 - 字段自身返回0000和2359之间的任何值 - 这是我需要在日期之后排序的值
所以我现在的查询返回
5月26日星期日 - 开始时间:0900 5月26日星期日 - 开始时间:1300 5月26日星期日 - 开始时间:2000年 5月26日星期日 - 开始时间:1030
但我喜欢这个:
5月26日星期日 - 开始时间:0900 5月26日星期日 - 开始时间:1030 5月26日星期日 - 开始时间:1300 5月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) : ?>
答案 0 :(得分:2)
快速(和笨拙)的方法是将start_time自定义字段更改为包含日期和时间的一个长数字:
YYYYMMDDhhmm
然后,如所示here:
query_posts($query_string.'&meta_key=start_time&orderby=meta_value');
答案 1 :(得分:1)
我设法使用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 :(得分:-1)
你可以尝试添加日期('h:i:s');