web-dev-qa-db-ja.com

WP_queryを使用したタイムスタンプ付きメタクエリ

地元のローラーダービーのために開発しているイベントシステムに問題があります。カスタム投稿タイプ( 'イベント')を作成しました。ユーザーはいくつかの異なる種類のイベントを追加できます(分類法: 'イベントタイプ '、用語:'試合 '、' * 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">&nbsp;</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つの予定されている予定のイベントが表示されますが、イベント名は正しい順序で表示されていません(表示されているイベントは必ずしも最初の予定ではありません)。追加)。

私は完全にこれにこだわっています、そして私は本当にイベントを正しい方法で順序付けする必要があります。任意の助けは大歓迎です。

乾杯!

1
BraMKJ

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
2
Stephen Harris