$query = "$select FROM $wpdb->posts AS p $join $where GROUP BY SUBSTRING($field,1,4) ORDER BY $field DESC $limit";
の部分で日付で並べ替えるように、例えば
ORDER BY m.meta_value, p.post_date DESC";
みたいな感じにする必要があるのでは?
トピック投稿者
yd2
(@yd2)
kurosquareさん、ありがとうございます。
$query = "$select FROM $wpdb->posts AS p $join $where GROUP BY SUBSTRING($field,1,4) ORDER BY m.meta_value, p.post_date DESC";
このように変更したところ、年別のリストの順番は変更されますが
記事の順番は変わりませんでした。
トピック投稿者
yd2
(@yd2)
kurosquareさん、すみません。勘違いをしていました。
上と同様にする必要があるとのことだったのですね。
‘date’でソートしたい場合を調べていたのですが、
このような書き方は全く違うのでしょうか。
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
if ( $query->is_year ) {
$meta_query = array(
array(
'key' => $query->get( 'meta_key' ),
'value' => $query->get( 'year' ),
'compare' => 'LIKE'
),
'meta_key'=> 'date',
'orderby'=> 'meta_value_num',
'order'=> 'ASC'
);
$query->set( 'meta_query' , $meta_query );
$query->set( 'year' , '' );
$query->set( 'date' , '' );
$query->set( 'meta_key' , '' );
}
}
#未検証
add_action( 'pre_get_posts', 'my_pre_get_posts' );
function my_pre_get_posts( $query ) {
if ( $query->is_year ) {
$meta_query = array(
array(
'key' => $query->get( 'meta_key' ),
'value' => $query->get( 'year' ),
'compare' => 'LIKE'
),
);
$query->set( 'meta_query' , $meta_query );
$query->set( 'year' , '' );
$query->set( 'date' , '' );
$query->set( 'meta_key' , 'date' );
$query->set( 'orderby' , 'meta_value_num' );
$query->set( 'order' , 'ASC' );
}
}
トピック投稿者
yd2
(@yd2)
kzさん、前回に引き続きありがとうございます。
書いていただいた内容を元に、このようにしたところ
思い通りの表示を実現することができました。
$query->set( 'meta_query' , $meta_query );
$query->set( 'year' , '' );
$query->set( 'date' , '' );
$query->set( 'meta_key' , 'date' );
$query->set( 'orderby' , 'meta_value' );
$query->set( 'order' , 'DECS' );
日付のカスタムフィールドが、数値ではなく文字列になっている(?)のが、
ややこしくなってしまった原因なのでしょうか。
ともあれ、やっと解決できました。
本当にありがとうございました。