カスタム投稿タイプ「event」、カスタムメタフィールド「event_date」、およびカスタム分類法「locations」があります。
このように投稿を取得するために$ wpdbをクエリしたい
私は次のクエリパラメータを試しています($ 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を使用してみましたが、結果は変わりません
orderby
にタイプミスがあり、meta_value_num
はorderby
の値としてのみ使用されます。これを試してください。
$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'
);