【WordPress】カテゴリーウィジェットに親カテゴリーのみを出力する
※本ページのリンクにはプロモーションが含まれています。
こんにちは、Ryohei(@ityryohei)です!
WordPressでサイドバーのウィジェットにカテゴリーを設置すると、標準では親カテゴリーと子カテゴリーの全一覧が出力されますが、今回は子カテゴリーを出力せずに親カテゴリーのみを出力する方法をご紹介したいと思います。
class-wp-widget-categories.phpを編集する
予めウィジェットのサイドバーにカテゴリーを追加しておき、カテゴリーの設定にて「階層を表示」にチェックを入れておきます。その後で、class-wp-widget-categories.phpを編集します。
該当ファイルは以下のディレクトリ内にあります。
wordpress > wp-includes > widgets
似た名称のファイルがずらりと置いてあると思いますが、その中にある class-wp-widget-categories.php を開きます。
class-wp-widget-categories.phpを下にスクロールしていくと、59~63行目辺りに以下のコードが確認できると思います。
$cat_args = array( 'orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h );
この配列に depth から始まる以下の一行を追加します。
$cat_args = array( 'depth' => 1, 'orderby' => 'name', 'show_count' => $c, 'hierarchical' => $h );
保存してページを更新すると、親カテゴリーのみのカテゴリーリストが表示されるようになります。
depthというのは深さを意味します。深さというのはこの場合は階層を指します。depth に指定する数値を増やしていくことで、出力される階層が深くなっていきます。デフォルトは0で全ての親子カテゴリー、1で親カテゴリーのみ、2で親カテゴリーと子カテゴリーのみ…と詳細に指定することができます。
ただ、この方法ではWordpressを更新するたびにファイルを書き換える必要があります。
そのため実際に使用する場合は直接カテゴリーリストを呼び出してカスタマイズする方法が望ましいです。
任意の場所にカテゴリーリストを表示する
カテゴリーリストを表示したい部分に以下のコードを記述します。サイドバーに表示する場合は、sidebar.php に記述します。
<?php wp_list_categories('title_li=&depth=1'); ?>
上のコードではカテゴリー名だけが表示されます。カテゴリー毎の投稿数を表示させたい場合は以下を追記します。
<?php wp_list_categories('title_li=&depth=1&show_count=1'); ?>
このままですと<li>タグのみで出力されますので、必要に応じて<ul>タグで囲みます。
<ul> <?php wp_list_categories('title_li=&depth=1&show_count=1'); ?> </ul>
他にも指定できるパラメータはたくさんあり、WordPress Codex に詳細が記載されています。以下のリンクからアクセスできます。
一行のコードを記述するだけでカテゴリーリストを表示することができ、カスタマイズも容易ですので、カテゴリーリストを出力する際は後者の方法が良いかもしれないですね。