〜functions.php を使う方法と、詰まったポイントまとめ〜
やりたかったこと
WordPress(Cocoon)でブログを運営していると、
こんな要求が出てきます。
- サイドバーのカテゴリ一覧を
- 自分の好きな順番で並べたい
- 特に
- 「本八幡系のカテゴリを一番上にしたい」
- その下に他のカテゴリを続けたい
ところが、
WordPress標準のカテゴリウィジェットには「順序(order)」の指定項目がありません。
最初に知っておくべき注意事項(重要)
functions.inc / functions.php を触るのは「自己責任」
今回の対応は
PHPファイルを直接編集します。
- 1文字ミスでサイトが真っ白になる可能性あり
- WordPress初心者にはおすすめしない
- 必ずバックアップを取ってから実施
という前提があります。
👉
「設定画面だけで何とかしたい人」には不向きです。
なぜ functions.inc を直接いじらないのか
Cocoonを使っていると、
/wp-content/themes/cocoon-master/function.inc
というファイルが目に入ります。
しかしここを編集するのは NG。
理由
- Cocoonのアップデートで 必ず上書きされる
- 変更が消える
- トラブル時に原因切り分けができなくなる
正解:cocoon_child の functions.php を使う理由
Cocoonでは
子テーマ(Cocoon Child) が用意されています。
編集すべき場所はここ
/wp-content/themes/cocoon-child/functions.php
これを使う理由
- 親テーマ更新の影響を受けない
- 不具合が出ても切り戻ししやすい
- WordPress的に「正しい拡張方法」
👉
functions.inc を直接触らず、子テーマで上書きする
これが鉄則です。
変更内容(結論)
やったこと
- サイドバーの「カテゴリー」ウィジェットに対して
- 表示順を PHP で強制的に指定
- SQLを直接いじらず、安全な方法を採用
実現した仕様
- 指定したカテゴリID(例:本八幡系)を先頭に固定
- それ以外のカテゴリは通常順
- 投稿が0件のカテゴリは表示しない
実際に使ったコード(完成版)
<?php
if ( ! defined( 'ABSPATH' ) ) exit;
add_editor_style();
/**
* サイドバー「カテゴリー」ウィジェットを完全手動順にする(安全版)
*/
// 上に出したいカテゴリID(この順)
function hon_yawata_priority_ids() {
return [6, 10, 8, 9];
}
add_filter('widget_categories_args', function ($args) {
$priority = hon_yawata_priority_ids();
if (empty($priority)) return $args;
// 投稿があるカテゴリのみ表示
$args['hide_empty'] = 1;
$all_ids = get_terms([
'taxonomy' => 'category',
'hide_empty' => 1,
'fields' => 'ids',
]);
if (is_wp_error($all_ids) || empty($all_ids)) {
return $args;
}
// priority → 残りカテゴリ の順
$ordered = array_values(array_unique(array_merge($priority, $all_ids)));
$args['include'] = $ordered;
$args['orderby'] = 'include';
$args['order'] = 'ASC';
return $args;
});
途中で悩んだポイントと解決方法
① カテゴリが突然「表示されなくなる」
原因
- SQLを直接いじる方法を使っていた
- ORDER BY が壊れて、結果が0件扱いに
解決
get_terms_orderbyを使うのをやめるorderby=includeを使う安全な方法に変更
② 0件のカテゴリが全部表示されてしまう
原因
hide_empty = 0を指定していた
解決
hide_empty = 1に変更- 「入口にしたいカテゴリ」だけは priority に含める設計に
③ functions.php が本当に読み込まれているか不安
確認方法
add_action('wp_footer', function(){
echo '<!-- CHILD_FUNCTIONS_OK -->';
});
HTMLソースにこれが出れば
子テーマの functions.php は確実に動いている。
まとめ
- Cocoonでカテゴリを自由に並び替えるには
- 設定画面だけでは不可能
- PHPで制御する必要がある
- functions.inc を直接触るのは避ける
- Cocoon Child の functions.php を使う
- SQLを直接書き換えない方法のほうが安全
- 最終的に「見た目・運用・安全性」のバランスが取れた
同じことで悩んでいる人へ
「なんで順序がないんだ…」と何時間も悩みましたが、
仕様を理解すれば できること・できないこと が見えてきます。
この方法は
- 雑誌風トップ
- 地域ブログ
- カテゴリに意味を持たせたいサイト
にはかなり有効です。


コメント