3

我有一些名为“日期”和“开始时间”的自定义字段,并希望按我的自定义字段“日期”和“开始时间”对帖子进行排序。我有以下查询 - 如果有人能指出我哪里出错了,那就太好了。

我的查询如下:

编辑:第二个数组可以更改为任何值 - 其自身的字段返回 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) : ?>
4

3 回答 3

2

一种快速(且尴尬)的方法是将您的 start_time 自定义字段更改为一个包含日期和时间的长数字:

YYYYMMDDhhmm

然后,如此处所示:

query_posts($query_string.'&meta_key=start_time&orderby=meta_value'); 
于 2013-05-07T11:45:29.033 回答
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; ?>
于 2013-05-07T11:45:43.630 回答
-1

您可以尝试添加 date('h:i:s');

于 2013-05-07T11:29:43.620 回答