このシリーズを書くのは久しぶりです。
前回、「記事一覧を更新日時の順にする」ってのをやったのですが、カテゴリやタグなどのアーカイブ一覧でも同様になってしまうのは不自然ではないかと、先日ふと思った次第です。アーカイブなので投稿日時の新しい順に並んでいる方が良いのではないかと。
アーカイブでは投稿日時の順にする
ということで、記事全体の一覧では更新日時の新しい順に、アーカイブでは投稿日時の新しい順に並べることにしました。is_archive() で判定するようにすればOKなので、 functions.php 内のコードを以下のように変更しました。
add_action( 'pre_get_posts', function( $query ) {
// 記事一覧を更新日時の順にする→https://tabibitojin.com/post-list-sort-order-change/
// ただしアーカイブは従来どおりに投稿日時の新しいものから。
if ( $query->is_main_query() && !is_archive() ) {
$query->set( 'orderby', 'modified' );
}
},999);
メタ情報の並びを合わせる
記事全体の一覧では更新日時の新しい順に並ぶようにしたので、それに合わせてメタ情報の表示の並びを「更新日時、投稿日時、カテゴリ、タグ」という具合にしました。
アーカイブでは投稿日時の新しい順に並べることしたので、それに合わせてメタ情報の表示の並びを「投稿日時、更新日時、カテゴリ、タグ」に変えることにします。テンプレート部品である parts/meta.php のコードを以下のように変更しました。
<?php
echo '<div class="meta">';
// 更新日。
$updated = '';
if ( get_the_date() != get_the_modified_date() ) {
$updated = sprintf( '<span class="updated-date"><i class="icon-repeat"></i> <time class="entry-date updated" datetime="%s">%s</time></span>',
esc_attr( get_the_modified_date( DATE_W3C ) ),
esc_html( get_the_modified_date() )
);
}
// 投稿日。
$published = sprintf( '<span class="published-date"><i class="icon-pencil"></i> <time class="entry-date published%s" datetime="%s">%s</time></span>',
get_the_date() != get_the_modified_date() ? '' : ' updated', // 投稿日と更新日が同じ場合は updated を追加。
esc_attr( get_the_date( DATE_W3C ) ),
esc_html( get_the_date() )
);
if ( is_archive() ) { // functions.php における 'pre_get_posts' の処理と合わせておくこと!
// アーカイブ時は「投稿日、更新日」の順。
echo $published, $updated;
} else {
// それ以外は「更新日、投稿日」の順。
echo $updated, $published;
}
if ( has_category() ) {
// カテゴリ。
printf( '<span class="cat-links"><i class="icon-folder"></i> %s</span>', get_the_category_list( ', ' ) );
}
if ( has_tag() ) {
// タグ。
printf( '<span class="tag-links"><i class="icon-tags"></i> %s</span>', get_the_tag_list( '',', ') );
}
echo '</div>';