カスタムフィールド値として開始日を持つ投稿を取得しました。最も近い開始日を持つ投稿が最初に表示されるように、私はサイドバーのそれらの投稿を昇順で表示しています。これは私が持っているものであり、それは素晴らしい仕事:
<?php query_posts('&post_type=events&posts_per_page=5&meta_key=start_date&orderby=meta_value&order=asc'); ?><?php while ( have_posts() ) : the_post(); ?><li><span class="eventtext"><?php the_title(); ?></span>
しかし、私は疑問に思っていました、開始日がすでに過ぎている投稿を表示しないようにどのようにクエリをフィルタすることができるでしょうか?
私はこれを試しました:
$today = date('d/m/Y', strtotime('+2 hours'));
query_posts(array(
'post_type' => 'events',
'posts_per_page' => 5,
'meta_key' => 'start_date',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'start_date',
'meta-value' => $value,
'value' => 'start_date',
'compare' => '>=',
'type' => 'CHAR'
)
)
));
しかし、何も表示されません。注意すべき1つのことは、開始日の値はmm/dd/yyy形式で保存されていますが、$ todayの日付形式を変更しても役に立たないということです。
UPDATE
だから今私はこれを得ました:
<?php
$today = date('m/d/Y', strtotime('+2 hours'));
$the_query = new WP_Query( array(
'post_type' => 'events',
'posts_per_page' => 5,
'meta_key' => 'start_date',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'start_date',
'meta-value' => 'start_date',
'value' => $today,
'compare' => 'DATE',
'type' => 'CHAR'
))
));
?>
サイドバーには何も表示されません。
注:投稿はその形式のstart_dateカスタムフィールドで保存されるため、日付はその形式になります。私はただこの仕事を得ようとしています、それから私はより適切なものに日付フォーマットを変更するつもりです。
これが確実に機能するためには、データベース内の日付フォーマットはyyyy-mm-dd
であるべきです。比較タイプはDATE
またはNUMERIC
であるべきです。現在の形式で25-04-2012の日付を取得し、それを日付26-04-1986と数値で比較すると、問題が何であるかを見ることができます。
メインループに加えてこれらのクエリを実行している場合は、 WP_Query の新しいインスタンスを使用してください。
編集 -
あなたが修正しなかったいくつかのエラーがありました。日付フォーマットを修正するまで、このはまだ正しく動作しないことに注意してください。
<?php
$today = date('m/d/Y', strtotime('+2 hours'));
$the_query = new WP_Query( array(
'post_type' => 'events',
'posts_per_page' => 5,
'meta_key' => 'start_date',
'orderby' => 'meta_value',
'order' => 'ASC',
'meta_query' => array(
array(
'key' => 'start_date',
'value' => $today,
'compare' => '>=',
'type' => 'DATE'
))
));
?>