「カテゴリー」や「タグ」のアーカイブページで提供されているタブ切り替え機能は新着順と人気順、「更新日順」のタブはありませんでした。「カテゴリー」と「タグ」のアーカイブページに新着・更新日順のタブ表示するようにカスタマイズした作業メモです。
カテゴリー と タグ ページに「更新日順」のタブを追加設定
SWELLの標準機能ではなかったカテゴリー ページとタグ ページに「更新日順」のタブを追加していきます。
コード作成時のWordPress、SWELL、PHPのバージョンです。
- WordPress6.9.4
- SWELL2.16.0
- PHP8.3.30
管理者メニューの 外観 > テーマファイルエディター > functions.phpで(1)と(2)をコード登録していきます。必須ではないですが「横揺れ」や「残像感(ガタつき)」を感じた際は(3)を追加CSS もしくは スタイルシート(style.css)にコピーします。
(1)カテゴリーまたはタグのアーカイブの並び順をURL引数で変更するコードです。
add_action('pre_get_posts', function($query) {
if ( is_admin() || ! $query->is_main_query() ) return;
if ( is_category() || is_tag() ) {
$orderby = filter_input(INPUT_GET, 'orderby', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
if ( $orderby === 'modified' ) {
$query->set('orderby', 'modified');
$query->set('order', 'DESC');
}
}
});
(2)記事一覧の前に切り替えタブを挿入するコードです。
add_action('loop_start', function($query) {
if ( ! (is_category() || is_tag()) || ! $query->is_main_query() || is_admin() ) return;
static $done = false;
if ( $done ) return;
$done = true;
$orderby = filter_input(INPUT_GET, 'orderby', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
$new_active = ($orderby !== 'modified');
$mod_active = ($orderby === 'modified');
$main_color = 'var(--color_main, #333)';
echo '<div class="c-categoryTab p-archiveTab" style="width:100%; margin: 0 0 20px; clear:both; text-align:center;">';
echo ' <ul class="p-archiveTab__list" style="display:inline-flex; list-style:none; padding:0; margin:0; border-bottom:2px solid #eee; min-width:240px; justify-content:center;">';
echo ' <li class="p-archiveTab__item" style="padding: 0 20px 10px; position:relative;">';
echo ' <a href="' . esc_url(remove_query_arg('orderby')) . '" style="text-decoration:none; font-weight:bold; color:' . ($new_active ? '#333' : '#999') . '; display:block;">新着順</a>';
if($new_active) echo '<span style="position:absolute; bottom:-2px; left:0; right:0; height:2px; background:' . $main_color . ';"></span>';
echo ' </li>';
echo ' <li class="p-archiveTab__item" style="padding: 0 20px 10px; position:relative;">';
echo ' <a href="' . esc_url(add_query_arg('orderby', 'modified')) . '" style="text-decoration:none; font-weight:bold; color:' . ($mod_active ? '#333' : '#999') . '; display:block;">更新日順</a>';
if($mod_active) echo '<span style="position:absolute; bottom:-2px; left:0; right:0; height:2px; background:' . $main_color . ';"></span>';
echo ' </li>';
echo ' </ul>';
echo '</div>';
}, 10);
(3)「新着順」と「更新日順」のタブを切り替えた際、「横揺れ」や「残像感(ガタつき)」を感じました。下記コード(常にスクロールバーの領域を確保(固定))をCSSに貼り付けることでほぼ解消されました。
html {
overflow-y: scroll;
}PC(Windows11)、SP(iPhone)、Raspberry Pi OSブラウザで確認
「カテゴリー」や「タグ」のアーカイブページに新着順・更新日順のタブを確認できました。ページネーションも正しく連動しています。
動作確認は、PC(Windows11)がFirefox(149.0.2 64ビット)と Edge・Chrome・Brave(いずれもChromiumベース(バージョン 146.0.7680.178 公式ビルド 64ビット)、SP(iPhone)がSafari(26.4.1)、Chrome(147.0.7727.99)、Brave(1.88(137))、Edge(147.0.3912.87)、Raspberry Pi OSがFirefox(142.0.1 (aarch64))、Chromium(142.0.7444.162(Official Build)built on Debian GNU/Linux 12 (bookworm) 64 ビット)で行っています。


サイト内の全てのカテゴリー(全記事一覧)ページで新着・更新日順のタブを確認できました。ページネーションも正しく連動しています。
