「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) : ?>