こんにちは、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 に詳細が記載されています。以下のリンクからアクセスできます。

Parameters

一行のコードを記述するだけでカテゴリーリストを表示することができ、カスタマイズも容易ですので、カテゴリーリストを出力する際は後者の方法が良いかもしれないですね。

この記事を書いた人

Ryohei

Webエンジニア / ブロガー

福岡のWeb制作会社に務めるWebエンジニアです。エンジニア歴は10年程で、好きな言語はPHPとJavaScriptです。本サイトは私がインプットしたWebに関する知識を整理し、共有することを目的に2015年から運営しています。Webに関するご相談があれば気軽にお問い合わせください。