web-dev-qa-db-ja.com

カスタムメタ値で投稿を注文しながら$ wpdbは特定の分類用語内の投稿タイプを問い合わせますか?

カスタム投稿タイプ「event」、カスタムメタフィールド「event_date」、およびカスタム分類法「locations」があります。

このように投稿を取得するために$ wpdbをクエリしたい

  1. 投稿は「イベント」投稿タイプである必要があります
  2. 「イベント」は、「ロケーション」タクソノミー内の特定の$ location用語に関連付ける必要があります。
  3. 結果は、今日の現在の日付と比較して、 'event_date'カスタムメタ値(実際はyymmdd形式の日付)で並べ替える必要があります。

私は次のクエリパラメータを試しています($ locationの値(IDまたはslug)を正しく取得して、このクエリに渡すことができます)。

SELECT  $wpdb->posts.* 
LEFT JOIN $wpdb->postmeta ON($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
LEFT JOIN $wpdb->terms ON($wpdb->term_taxonomy.term_id = $wpdb->terms.term_id)
FROM    $wpdb->posts, $wpdb->postmeta
WHERE   $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND     $wpdb->terms.term_id = $location
AND     $wpdb->term_taxonomy.taxonomy = 'locations'
AND     $wpdb->posts.ID = $wpdb->postmeta.post_id 
AND     $wpdb->posts.post_type = 'event'
AND     $wpdb->posts.post_status = 'publish' 
AND     $wpdb->postmeta.meta_key = 'event_date'
AND     $wpdb->postmeta.meta_value > NOW()
ORDER   BY $wpdb->postmeta.meta_value ASC
LIMIT   $numberofposts

クエリが機能していません。 JOIN部分と分類部分を削除すると、 'event_date'メタとNOW()dateを比較してすべての結果を並べ替えることができます。

タクソノミの部分で間違っていると思いますが….

お勧めのとおり、私は$ wpdbクエリではなくWP_Queryを実行しようとしました。

$args = array(
               'post_type' => 'event',
               'tax_query' => array(
                                     array(
                                            'taxonomy' => 'locations',
                                            'field' => 'id',
                                            'terms' => $location // location term id
                                           )
                                    ),
               'meta_key' => 'event_date',  // this meta field stores event date in yymmdd format
               'meta_value' => $today,  // this would be today's date in yymmdd format
               'meta_compare' => '>=',
               'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
               'orderby'=> 'meta_value_num'


  );

ただし、後者の場合、ソート順を含む$ args内の他の指定に関係なく、クエリは特定のpost_typeにあるすべての投稿を返します。

Meta_keyの代わりにmeta_queryを使用してみましたが、結果は変わりません

1
unfulvio

orderbyにタイプミスがあり、meta_value_numorderbyの値としてのみ使用されます。これを試してください。

$args = array(
    'post_type' => 'event',
    'tax_query' => array(
        array(
            'taxonomy' => 'locations',
            'field' => 'id',
            'terms' => $location // location term id
        )
    ),
    'meta_key' => 'event_date',  // this meta field stores event date in yymmdd format
    'meta_value' => $today,  // this would be today's date in yymmdd format
    'meta_compare' => '>=',
    'posts_per_page' => $numberofposts, // this variable stores the number of posts I want to get
    'orderby'=> 'meta_value_num'
);
2
Milo