3

「date」と「start_time」という名前のカスタム フィールドがいくつかあり、「date」と「start_time」のカスタム フィールドで投稿を並べ替えたいと考えています。次のクエリがあります。どこが間違っているかを誰かが指摘できれば、それは素晴らしいことです。

私が持っているクエリは以下のとおりです。

編集: 2 番目の配列は任意に変更できます - フィールド自体は 0000 から 2359 の間の任意の値を返します - これは、日付の後に並べ替える必要がある値です

だから私は現時点でこれを返すクエリを持っています

5 月 26 日 (日) - 開始時間: 0900 5 月 26 日 (日) - 開始時間: 1300 5 月 26 日 (日) - 開始時間: 2000 5 月 26 日 (日) - 開始時間: 1030

しかし、私はこれが欲しい:

5 月 26 日 (日) - 開始時刻: 0900 5 月 26 日 (日) - 開始時刻: 10:30 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 カスタム フィールドを日付と時刻を含む 1 つの長い数字に変更することです。

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 に答える