1

最初のカスタム フィールド (開始日) で結果を並べ替えながら、複数のカスタム フィールドを使用して結果を表示しようとしています。私が見た推奨事項により、これを試すようになりました。

$args = array(
    'category_name' => 'Events',
    'posts_per_page' => 6,
    'meta_key' => 'startdate',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'startdate',
            'value' => $date,
            'compare' => '>='
        ),
        array(
            'key' => 'closedate',
            'value' => $date,
            'compare' => '>='
        )
    ),
    'orderby' => 'meta_value',
    'order' => 'desc'
);

問題は、meta_key パラメータがないと、結果がデフォルトで投稿の日付でフィルタリングされることです。meta_key パラメーターを追加して結果を並べ替えると、すべての投稿で startdate と等しい meta_key が取得されます。これらの meta_key パラメータを追加することにより、ステートメントは meta_query 配列の条件を完全に無視しているようです。startdate と等しい meta_key を持つすべての投稿を取得せずに、クエリを startdate で並べ替えるにはどうすればよいですか?

4

1 に答える 1

3

ソリューション:

$args = array(
'category_name' => 'Events',
'posts_per_page' => 6,
'meta_key' => 'startdate',
'meta_compare' => '>=',
'orderby' => 'meta_value',
'meta_value' => $date,
'order' => 'DESC',
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key' => 'startdate',
            'value' => $date,
            'compare' => '>='
       ),
        array(
            'key' => 'closedate',
            'value' => $date,
            'compare' => '>='
        )
    )
);

基本的に、meta_key 引数は MySQL ステートメントで結合を作成します。結合は、引数の meta_query 部分に記述された条件の影響を受けません。Codexは、結合をフィルター処理するためのパラメーターを列挙します。すべての日付 >= 変数 $date の開始日で結果を並べ替えたいと思いました。'meta_compare' => '>='および'meta_value' => $dateを $args 配列に追加することで、必要に応じて結果をフィルター処理することができました。

于 2012-08-21T19:07:37.873 に答える