4

私はwordpressのmeta_queryを使用して、基本的なイベントシステムを構築しようとしています。

各イベントには、いくつかのメタキー/値があります。例えば:

Start Date
End Date
Ongoing (Yes/No)

進行中(進行中=はい)と進行中でない(進行中=いいえ)のイベントを分離したいと思います。

次に、進行中のイベント内で、次のイベントを分離します。

  1. 2週間以内に開始または2週間以内に終了
  2. すでに開始され、2週間を超えて終了します

私の問題は、本質的に次のようなケース1にあります。

(Start Date <= Two Weeks OR End Date <= Two Weeks) AND Ongoing == YES

WP_Queryを使用すると、次のようになります。

$ongoingSoon = array(
        'category_name' => 'event',
        'meta_key' => 'End Date',
        'orderby' => 'meta_value',
        'order' => 'ASC',
        'meta_query' => array(
            'relation' => 'AND',
            array(
                'key' => 'Start Date',
                'value' => $today,
                'compare' => '>='
            ),
            array(
                'key' => 'End Date',
                'value' => $nexttwoweeks,
                'compare' => '<='
            ),
            array(
                'key' => 'Ongoing',
                'value' => 'Yes'
            )
        )
    );

これは、次の2週間以内に開始および終了する進行中のイベントのみを返します。関係をORに変更すると、進行中でないイベントも表示されます。必要なことを達成する方法はありますか?

4

1 に答える 1

2

meta_queryは現在作成されているので、これを行うことは不可能であると99%確信しています。

これを回避するためにできることは、ブール値のように機能し、1つの用語(「yes」または「1」など)のみを使用するOngoingの(おそらくプライベートな)カスタム分類法を作成することです。次に、WP_Queryは次のように変更されます。

$ongoingSoon = array(
    'category_name' => 'event',
    'meta_key' => 'End Date',
    'orderby' => 'meta_value',
    'order' => 'ASC',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'Start Date',
            'value' => $today,
            'compare' => '>='
        ),
        array(
            'key' => 'End Date',
            'value' => $nexttwoweeks,
            'compare' => '<='
        )
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'ongoing',
            'field' => 'slug',
            'terms' => 'yes'
        )
    )
);
于 2011-09-23T15:33:24.143 に答える