WordPressのパンクズリストをプラグインなしで自作する方法
1052 回閲覧されました
みなさんこんにちは、jonioです。
パンクズリストですがプラグインで作る方が多いと思いますが完全初心者でなければ自作した方がいいと思います。
私もずーっとプラグインを使用していたのですが自作に切り替えたのでパンクズリストを自作する方法を解説します。
最後にコピペでできる方法も解説しますので自作を導入しましょう。
プラグインはなるべく使わない方が読み込みが減ってサイトの表示速度が上がります。
それでは説明します。
投稿の場合
使い回しができるようにfunctions.phpに記述しますがまず↓のコードを書きます。
パンクズリストは投稿ページ・固定ページ・アーカイブ・検索結果・404のページなどに表示しますがまずは投稿ページです。
これで投稿ページ(single.php)で「<?php the_breadcrumbs(); ?>」と書くとパンクズリストが表示されます。
それではコードを説明します。
2行目の「$post」はWordPressで使う事ができる記事の色んな情報が詰まった物です。
「global(グローバル変数と言います)」を付ける事でどこのフィルからでも使う事ができます。
3行目の「$results」はこの段階では空っぽですが今からこれに情報を詰めて最後に「return $results」とすることで他のファイルで$resultsの中身(パンクズリストの事)を表示します。
5行目の「get_post_taxonomies( )」ですがカスタムタクソノミーを取得しますがこれはカスタム投稿タイプにも対応できる様にする為です。
「get_post_taxonomies($post)」とすることで記事($post)のカスタムタクソノミーを取得しますが$postがカスタム投稿タイプではなく投稿の場合はカテゴリーを取得します。
投稿の場合のカテゴリーは↓の赤枠です。
ちなみに投稿の場合の「get_post_taxonomies($post)」の中身は↓になります。
「[0] => category」がカテゴリー名になりますがこれを使うために6行目の「get_the_terms( $post, $taxonomy[0] )」があります。
2行目・5行目・6行目で投稿の場合のカテゴリー名を取得します。
8行目の「<pre>></pre>」ですが「<pre></pre>」がないと「>」はプログラム上タグの一部と間違えられる可能性があるからつけています。
8行目でパンクズリストは「ホーム > 」となります。
10行目から15行目までが投稿の場合のパンクズリストで10行目の「is_single()」で投稿の場合になります。
12行目の「get_term_link()」でターム(投稿の場合はカテゴリー)のURLを取得します。
使い方は「get_term_link(“タームのID または スラッグ“, “カスタムタクソノミー“)」で「カスタムタクソノミー」に所属する「タームのID または スラッグ」のURLを取得するという意味になります。
だから12行目の「get_term_link( $term[0], $taxonomy[0] )」の意味は「カスタムタクソノミーに所属するスラッグのURL(ザックリ言うと投稿画面で選択したカテゴリー名のURL)を取得する」という意味です。
また12行目の「$term[0]->name」はカテゴリー名になります。
14行目の「get_the_title( $post )」で記事のタイトルを表示します。
ここまででパンクズリストに表示される内容は「ホーム > 記事のカテゴリー名 > 記事のタイトル」になります。
次はアーカイブの場合です。
アーカイブ
functions.phpのコードを↓にします。
19行目〜21行目ですが19行目の「is_archive() 」でアーカイブの場合になり20行目の「get_the_archive_title( )」でアーカイブ名を表示します。
次は404の場合です。
404
functions.phpのコードを↓にします。
22行目〜24行目ですが22行目の「is_404()」が404の場合という意味で23行目の「404 Not Found」で404の場合のパンクズリストは404 Not Found」になります。
次は検索結果の場合です。
検索結果
functions.phpのコードを↓にします。
25行目〜27行目ですが25行目の「is_search()」で検索結果の場合という意味で26行目の「get_search_query()」で検索キーワードを表示します。
最後は固定ページです。
固定ページ
functions.phpのコードを↓にします。
25行目の「is_page()」で固定ページの場合という意味です。
26行目〜32行目は親カテゴリーがある場合です。
親カテゴリーは↓の赤枠です。
26行目の「$post->post_parent」が親カテゴリーのIDを表していて「$post->post_parent != 0」は親カテゴリーのIDが0じゃない(親カテゴリーがある)場合という意味です。
この時に27行目〜31行目で子カテゴリーを表示します。
親カテゴリーがない場合は33行目でカテゴリーを表示します。
親カテゴリーを表示する手順は以下になります。
27行目の「get_post_ancestors( $post->ID )」で親投稿(祖先がある場合はそれも)のIDを配列で取得します。
投稿IDは投稿画面のURLに記載があります。
配列で取得した時の中身は「[親投稿のID,祖先投稿のID]」になりますがこれをforeachで表示します。
すると親投稿→子投稿の順に表示するのですがパンクズリストにする時は祖先投稿→親投稿の順にしたいので配列の順番を逆しないといけません。
だから配列の中身を逆にするために28行目の「array_reverse( $ancestorsArr )」があります。
そして配列の中身を29行目〜31行目で表示します。
最後はコピペしたい人用です。
コピペ用
コピペで使いたい人はfunctions.phpに↓のコードをそのまま貼って下さい。
パンクズリストを使う場合
今回は投稿・アーカイブ・固定ページ・検索結果・404で使用できるパンクズリストの作り方を解説していますので該当するテンプレートファイルで「<?php the_breadcrumbs(); ?>」と記述すればパンクズリストが表示されます。
CSSに関しては解説の対象外なので自分で記述して下さい。