WordPressをカスタマイズしようとしたときにカテゴリー一覧を投稿や固定ページ、またヘッダフッター、サイドメニューに表示したい時はないでしょうか。
けど、そんな中で悩むことは、
・ページにカテゴリー一覧を表示したいがやり方がわからない。
・functions.phpを変更することなくカテゴリー一覧を表示したいが方法がわからない。
ですよね。
今回はそんなお悩みを解決する
WordPressでカテゴリー一覧を表示する方法と子カテゴリーも含むリンク付きで表示する方法について
まとめます!
もくじ
WordPressでカテゴリー一覧を表示するイメージ
WordPressでカテゴリー一覧を表示するイメージについて説明をします。
まず、カテゴリー一覧を表示する場所は新規作成した投稿と固定ページの本文やウイジェットの編集エリア、ヘッダフッターなど共通パーツとなります。
そこにショートコードを加えます。
ショートコードの内容は、
「ショートコード名」
のみで、引数はありません。(表示件数や階層指定などしたい場合は、後で追加可能です)
次にfunction.phpにショートコード関数を追加しますが、今回はプラグインを使ってfunction.phpを編集することなく実装していきます。
使うプラグインは「Code Snippests」です。
ショートコードを追加したページやウイジェットをプレビューすると、カテゴリー一覧がリンク付きで表示されます。
カンタンですね。
それではさっそく実装してみましょう!
プラグイン「Code Snippets」をインストールする
プラグイン「Code Snippets」をインストールしましょう。
「Code Snippets」を使うとfunctions.php を直接編集することなく、ショートコードを追加できますので、とても安全で便利です。
WordPressのカテゴリー一覧を呼び出すショートコードを追加する
Snippetを追加する
ショートコードと関数を実装するSnippetを追加しましょう。
WordPressの管理コンソールを開き、左サイドメニューの「All Snippets」>「Add New」をクリックします。
新規画面が立ち上がりましたね。
任意のタイトル名を入力します。
サンプルは「【ショートコード】カテゴリー一覧」
としました。
ショートコードの定義を追加する
こちらのショートコードをCode欄へ入力します。
//ショートコードを追加します。
add_shortcode('CategoryList', 'FuncCategoryList');
できましたら「SaveChange」ボタンを押して保存してください。
WordPressのカテゴリー一覧を生成する関数を追加する
続いて同じくCode欄へカテゴリー一覧を生成する関数を追加していきます。
関数を追記する
カテゴリー一覧関数を追記します。
//カテゴリー一覧を生成する関数
function FuncCategoryList() {
//get_categoriesの引数を指定します。
$args = array(
'type' => 'post', //取得するカテゴリーの種別を指定します。postかlinkを指定します。
'child_of' => '', //親カテゴリーの子孫カテゴリーをすべて取得するかカテゴリーIDを指定します。''(初期値)はすべて含める
'parent' => 0, //親カテゴリー直下の子カテゴリーを取得するかカテゴリーIDを指定します。 ''(初期値)はすべて含める、0は一階層目のみ
'orderby' => 'id', //指定項目をキーとする、カテゴリーの並び替えパターンを指定。指定する文字列はid、 name(初期値)、slug、count(投稿多い順),term_group(親タームのタームID)
'order' => 'DESC', //並び順を昇順か降順か指定します。'ASC'は昇順、'DESC'は降順(日付の場合最新が頭になる)
'hide_empty' => 1, //記事がないカテゴリーを表示するか否かを指定します。1(true)(初期値)は表示する、、2(false)は表示しない
'hierarchical' => 1, //記事がない子カテゴリーを表示するか否かを指定します。1(true)(初期値)は表示する、、2(false)は表示しない
'exclude' => '', //表示させないカテゴリーIDを指定します。単体指定の他コンマ(,)区切りで複数指定もできます。
'include' => '', //表示するカテゴリーIDを指定します。単体指定の他コンマ(,)区切りで複数指定もできます。
'number' => '', //カテゴリーの表示件数上限を指定します。
'taxonomy' => 'category', //カテゴリの代わりにタクソノミーを指定します。categoryが初期値です。
'pad_counts' => false //子カテゴリーを含めてリンクおよび投稿数を算出するか指定します。1(true)は含める、2(false)(初期値)は含めないです。
);
//リスト形式のHTMLコードを生成します。
$strHtml = "<ul>";
//カテゴリーオブジェクトを取得します。
$objCategories = get_categories($args);
//存在するカテゴリーを1件づつ取得し、件数分処理を繰り返します。
foreach ( $objCategories as $objCategory ) {
//親カテゴリーを出力します。
$strHtml .= '<li><a href="' . get_category_link( $objCategory->term_id ) . '">' . $objCategory->name . '</a>'."---親カテゴリーID:". $objCategory->term_id ."---投稿数:". $objCategory->count;
$args2 = array(
'child_of' => $objCategory->cat_ID, //親カテゴリーの子孫カテゴリーをすべて取得するかカテゴリーIDを指定します。''(初期値)はすべて含める
);
//子カテゴリーを取得します。
$objcatChildrens = get_categories( $args2);
//子カテゴリーがあるか判定します。
if ($objcatChildrens) {
$strHtml .= "<ul>";
//子カテゴリーを出力します。
foreach ( $objcatChildrens as $objcatChildren ) {
$strHtml .= '<li><a href="' . get_category_link( $objcatChildren->term_id ) . '">' . $objcatChildren->name .'</a>'."---子カテゴリーID:". $objcatChildren->term_id ."---投稿数:". $objcatChildren->count . '</li>';
}
$strHtml .= "</ul>";
$strHtml .= "</li>";
}
}
$strHtml .= "</ul>";
return $strHtml;
}
影響範囲を設定する
Code欄の下にある影響範囲を設定します。影響範囲は最小限となるよう、フロントエンドのみを選択しましょう。
保存、または保存し反映する
入力した内容を保存します。即時に反映したい方は「Activate」のボタンを押してください。
固定ページを新規作成する
固定ページを新規作成しましょう。
カテゴリー一覧のショートコードを追加する
作成した固定ページへカテゴリー一覧のショートコードを追加します。
固定ページへショートコードを追加する
ショートコードの内容は、引数は何も設定ていないので
「ショートコード名」のみ
となります。
[CategoryList]
プレビューする
保存して、プレビュー表示をしてみましょう。
はい、反映できていますね。
カテゴリー一覧コードの説明
カテゴリー一覧コードについて説明します。
ショートコードを追加
add_shortcodeはショートコードタグ用のフックを追加する関数です。
パラメータは以下の通りです。
$func: ショートコードが見つかったときに実行するコールバック関数を指定
コールバック関数設定
ショートコードから呼び出す関数となります。
function FuncCategoryList() {
カテゴリー一覧を取得するのに利用した関数は
get categories
となります。
get categoriesはパラメータに合致するカテゴリーのオブジェクトを配列として返します。
パラメータは以下の通りです。
取得するカテゴリーの種別を指定します。postかlinkを指定します。
‘child_of’ => ”,
親カテゴリーの子孫カテゴリーをすべて取得するかカテゴリーIDを指定します。
”(初期値)はすべて含める
‘parent’ => 0,
親カテゴリー直下の子カテゴリーを取得するかカテゴリーIDを指定します。
”(初期値)はすべて含める、0は一階層目のみ
‘orderby’ => ‘id’,
指定項目をキーとする、カテゴリーの並び替えパターンを指定。指定する文字列はid、 name(初期値)、slug、count(投稿多い順),term_group(親タームのタームID)
‘order’ => ‘DESC’,
並び順を昇順か降順か指定します。’ASC’は昇順、’DESC’は降順(日付の場合最新が頭になる)
‘hide_empty’ => 1,
記事がないカテゴリーを表示するか否かを指定します。
1(true)(初期値)は表示する、2(false)は表示しない
‘hierarchical’ => 1,
記事がない子カテゴリーを表示するか否かを指定します。
1(true)(初期値)は表示する、2(false)は表示しない
‘exclude’ => ”,
表示させないカテゴリーIDを指定します。
単体指定の他コンマ(,)区切りで複数指定もできます。
‘include’ => ”,
表示するカテゴリーIDを指定します。
単体指定の他コンマ(,)区切りで複数指定もできます。
‘number’ => ”,
カテゴリーの表示件数上限を指定します。
‘taxonomy’ => ‘category’,
カテゴリの代わりにタクソノミーを指定します。
category(初期値)
‘pad_counts’ => false
子カテゴリーを含めてリンクおよび投稿数を算出するか指定します。
1(true)は含める、2(false)(初期値)は含めない
今回はまず1階層目の親カテゴリーのみを取得し、親カテゴリーに子カテゴリーが存在したら2階層目を表示させる仕様となっています。
ですので、初回のパラメータ指定は親カテゴリのみを取得する設定となっています。
具体的には、
を指定し、1階層目のみを出力しています。
リスト形式(UL-LI)のHTMLコードを生成します。
カテゴリーオブジェクトを取得します。
存在するカテゴリーを1件づつ取得し、件数分処理を繰り返します。
親カテゴリーを出力します。
子カテゴリーを取得します。
$objcatChildrens = get_categories( $args2);
$objCategoryのcat_IDプロパティで親カテゴリIDを取得し、パラメータ’child_of’に指定することにより該当親カテゴリーの子カテゴリーリストを取得しています。
子カテゴリーがあるか判定します。
子カテゴリーを出力します。
$strHtml .= ‘<li><a href=””‘ . get_category_link( $objcatChildren->term_id ) . ‘””>’ . $objcatChildren->name .'</a>’.””—子カテゴリーID:””. $objcatChildren->term_id .””—投稿数:””. $objcatChildren->count . ‘</li>’;
}
$strHtml .= “”</ul>””;
$strHtml .= “”</li>””;
}
最後に生成したHTMLを返り値に渡します。
WordPressのカテゴリー一覧の並び順を投稿数が多い順に変える
WordPressのカテゴリー一覧の並び順を投稿数が多い順に変えてみましょう。
変える箇所は1か所のみです。
get_categoriesの以下のパラメータを変更します。
はい、投稿が多い順に変わりましたね。
nameが初期値で、idはカテゴリID順、slugはスラグ順となります。
降順から昇順に変えたい場合は、
をASC’に指定してください。
WordPressのカテゴリー一覧から一部のカテゴリーを除外する
WordPressのカテゴリー一覧から一部のカテゴリーを除外したい場合がありますね。
同じくパラメータで指定が可能です。
早速設定をしてみましょう。
1階層目の特定親カテゴリーを除外する
除外対象は以下とします。
カテゴリーIDは3番ということがわかりました。
つづいて、get_categoriesのパラメータに3番を除外する設定をします。
exclude’ はカテゴリーIDを指定すると除外するパラメータです。
プレビューしてみましょう。
はい、
「暮らし—親カテゴリーID:3」
が除外されていますね。
2階層目の特定子カテゴリーを除外する
つづいて、2階層目の特定子カテゴリーを除外してみましょう。
2階層目の子カテゴリーは親カテゴリーと別の処理としているため、2つ目のパラメータ「$args2 」に設定する必要があります。
除外する対象の子カテゴリーは
とします。
子カテゴリーIDは41なので、41番を指定します。
保存してプレビューしてみましょう。
はい、
「芸能—子カテゴリーID:41—投稿数:17」
が消えてますね!
ちなみに複数の子カテゴリーを指定する場合はカンマ「,」区切りで追加します。
ここまで変更を加えたコード
ここまで変更を加えたコードをまとめます。
//ショートコードを追加します。
add_shortcode('CategoryList', 'FuncCategoryList');
//カテゴリー一覧を生成する関数
function FuncCategoryList() {
//get_categoriesの引数を指定します。
$args = array(
'type' => 'post', //取得するカテゴリーの種別を指定します。postかlinkを指定します。
'child_of' => '', //親カテゴリーの子孫カテゴリーをすべて取得するかカテゴリーIDを指定します。''(初期値)はすべて含める
'parent' => 0, //親カテゴリー直下の子カテゴリーを取得するかカテゴリーIDを指定します。 ''(初期値)はすべて含める、0は一階層目のみ
'orderby' => 'count', //指定項目をキーとする、カテゴリーの並び替えパターンを指定。指定する文字列はid、 name(初期値)、slug、count(投稿多い順),term_group(親タームのタームID)
'order' => 'DESC', //並び順を昇順か降順か指定します。'ASC'は昇順、'DESC'は降順(日付の場合最新が頭になる)
'hide_empty' => 1, //記事がないカテゴリーを表示するか否かを指定します。1(true)(初期値)は表示する、、2(false)は表示しない
'hierarchical' => 1, //記事がない子カテゴリーを表示するか否かを指定します。1(true)(初期値)は表示する、、2(false)は表示しない
'exclude' => '3', //表示させないカテゴリーIDを指定します。単体指定の他コンマ(,)区切りで複数指定もできます。
'include' => '', //表示するカテゴリーIDを指定します。単体指定の他コンマ(,)区切りで複数指定もできます。
'number' => '', //カテゴリーの表示件数上限を指定します。
'taxonomy' => 'category', //カテゴリの代わりにタクソノミーを指定します。categoryが初期値です。
'pad_counts' => false //子カテゴリーを含めてリンクおよび投稿数を算出するか指定します。1(true)は含める、2(false)(初期値)は含めないです。
);
//リスト形式のHTMLコードを生成します。
$strHtml = "<ul>";
//カテゴリーオブジェクトを取得します。
$objCategories = get_categories($args);
//存在するカテゴリーを1件づつ取得し、件数分処理を繰り返します。
foreach ( $objCategories as $objCategory ) {
//親カテゴリーを出力します。
$strHtml .= '<li><a href="' . get_category_link( $objCategory->term_id ) . '">' . $objCategory->name . '</a>'."---親カテゴリーID:". $objCategory->term_id ."---投稿数:". $objCategory->count;
$args2 = array(
'child_of' => $objCategory->cat_ID, //親カテゴリーの子孫カテゴリーをすべて取得するかカテゴリーIDを指定します。''(初期値)はすべて含める
'exclude' => '41', //表示させないカテゴリーIDを指定します。単体指定の他コンマ(,)区切りで複数指定もできます。
);
//子カテゴリーを取得します。
$objcatChildrens = get_categories( $args2);
//子カテゴリーがあるか判定します。
if ($objcatChildrens) {
$strHtml .= "<ul>";
//子カテゴリーを出力します。
foreach ( $objcatChildrens as $objcatChildren ) {
$strHtml .= '<li><a href="' . get_category_link( $objcatChildren->term_id ) . '">' . $objcatChildren->name .'</a>'."---子カテゴリーID:". $objcatChildren->term_id ."---投稿数:". $objcatChildren->count . '</li>';
}
$strHtml .= "</ul>";
$strHtml .= "</li>";
}
}
$strHtml .= "</ul>";
return $strHtml;
}
さいごに
いかがでしょうか。
今回は、
WordPressでカテゴリー一覧を表示する方法と子カテゴリーも含むリンク付きで表示する方法について
まとめました。
また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。