地元のローラーダービーのために開発しているイベントシステムに問題があります。カスタム投稿タイプ( 'イベント')を作成しました。ユーザーはいくつかの異なる種類のイベントを追加できます(分類法: 'イベントタイプ '、用語:'試合 '、' * fresh_meat_day * '、' * public_event * ')ユーザーは、カスタムフィールドを使用するタイトル、説明、場所、および日付を入力することもできます(通常の投稿日ではありません)。
指定したイベントページ(events.php)にイベントを表示し、ランディングページに各カテゴリの最初のイベントを表示します。イベントページに問題はありません。日付順(ASC)に並べ替えられた各予定イベントを表示するNiceテーブルが表示されます。私の問題は、ランディングページのイベントの順序にあります。
このコードを使用して、ランディングページにイベントを表示します。
<?php
$post_type = 'event';
$tax = 'event-type';
$todaysDate = date('d.M.y');
$todaysString = strtotime($todaysDate);
$tax_terms = get_terms($tax, array('orderby' => 'id', 'order' => 'ASC'));
if ($tax_terms) {
foreach ($tax_terms as $tax_term) {
$args = array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => 1,
'meta_key' => 'event_date',
'meta_compare' => '=',
'meta_value' => $todaysString,
'orderby' => 'meta_value',
'order' => 'ASC',
'caller_get_posts' => 1
); // END $args
$my_query = null;
$my_query = new WP_Query($args);
if ($my_query->have_posts()) { ;?>
<ul>
<?php while ($my_query->have_posts()) : $my_query->the_post();
?>
<li>
<div class="togglebox_140">
<img src="<?php bloginfo("template_directory"); ?>/images/events_freshmeat.png" />
<div class="togglebox_140_content">
<div class="togglebox_140_background"> </div>
<div class="togglebox_text">
<?php echo '<p class="togglebox_caption">Next '.$tax_term->name.'</p>';?>
<p class="togglebox_text_type"><?php the_title(); ?></p>
</div>
</div>
</div>
</li>
<?php
endwhile;
} // END if have_posts loop?>
</ul>
<?php wp_reset_query();
} // END foreach $tax_terms
} // END if $tax_terms
?>
私がそれが言うところの行を削除するときを除いて、私はこのコードから全く出力を得ません
'meta_vale' => $todaysString;
その行を削除すると、3つの予定されている予定のイベントが表示されますが、イベント名は正しい順序で表示されていません(表示されているイベントは必ずしも最初の予定ではありません)。追加)。
私は完全にこれにこだわっています、そして私は本当にイベントを正しい方法で順序付けする必要があります。任意の助けは大歓迎です。
乾杯!
Kaiserが指摘したように、meta_value => $todaysString
はキーevent_date
の値が今日の文字列と等しいイベントを問い合わせています。すなわち今日の出来事.
また、strtotime
を使用したという事実から、あなたはタイムスタンプでソートしていることを示唆しています - これは文字列ではなく数として解釈(そしてソート)したいものです。 meta_vaue
で並べ替えるのではなく、meta_value_num
で並べ替える必要があります。試してください:
$args = array(
'post_type' => $post_type,
"$tax" => $tax_term->slug,
'post_status' => 'publish',
'posts_per_page' => 1,
'meta_key' => 'event_date',
'orderby' => 'meta_value_num',
'order' => 'ASC',
); // END $args