WordPressテーマ「スワロー」に目次を追加しよう!【プラグイン不要】

WordPress

こんにちは、かがみです。

昨日(2月1日)Googleアドセンスに申し込みをしまして、その直後に日課の筋トレを始めたんですが、審査結果が気になって気になって集中できませんでした笑

まぁ、結果は最長で2週間くらいかかったという話も聞くので、ここは気長にカスタマイズや記事を書いてブログ運営を楽しんでいきたいと思います。

モチ
ところで、かがみ? このブログ、記事に目次がないことに気が付いちゃった……

うん、目次は必要だね!

目次があると最初に記事の内容がパっと見で分かるのと、あとで見返すときに目的の場所にすぐ飛べて便利なので、いずれは入れないとって思ってました。

ただ、僕が使っているWordPressテーマ「スワロー」には、見たところ標準で目次のショートコードが搭載されていません。

ちょっと調べたら以下のようなプラグインがあるので簡単に追加することはできそうです。

主な目次プラグイン
・Easy Table of Contents
・Table of Contents Plus

でも、プラグインはたくさん入れるとサイトが重くなってしまい、Googleからの評価も悪くなってしまうらしいので、今回は目次を自作してみようと思います!

この記事で紹介するコードは、WordPressテーマ「スワロー」で正常な動作を確認しています。
別のテーマで使用される際は、念のためバックアップを取ってからご利用ください。

目次をHTMLとCSSで作成しよう

それでは早速、目次の見た目をHTMLとCSSでコーディングしていくのですが、その前に子テーマの導入をおすすめします!

今から説明するCSSやJavaScriptを親テーマに直接追加すると、親テーマがアップデートされた時に追加した内容が消えてしまうんです。

そこで子テーマを導入すると、親テーマのアップデートの影響を受けないので、安心してカスタマイズすることができます。

詳しくは下記の記事も併せてご覧ください。

>>WordPressに子テーマを追加してCSSでカスタマイズしてみよう!

>>WordPressの子テーマからJavaScriptファイルを読み込む方法

HTMLの作成

まず大枠、タイトルとhideの文字を書きます。
hideのaタグのhrefは#のままで大丈夫です!

  1. <div class="contents-list">
  2.   <p class="title">
  3.     CONTENTS[ <a href="#" class="toggleBtn">hide</a> ]
  4.   </p>
  5. </div>

次に、クリックして目的の見出しまで飛べるようにページ内リンクの部分を追加します。
<ul class=”list”>~</ul>で囲った部分ですね。

  1. <div class="contents-list">
  2.   <p class="title">
  3.     CONTENTS[ <a href="#" class="toggleBtn">hide</a> ]
  4.   </p>
  5.   <ul class="list">
  6.     <li><a href="#contents-1">01| H2見出し</a></li>
  7.       <li class="indent"><a href="#contents-2">・H3見出し</a></li>
  8.       <li class="indent"><a href="#contents-3">・H3見出し</a></li>
  9.     <li><a href="#contents-4">02| H2見出し</a></li>
  10.       <li class="indent"><a href="#contents-5">・H3見出し</a></li>
  11.       <li class="indent"><a href="#contents-6">・H3見出し</a></li>
  12.     <li><a href="#contents-7">03| まとめ</a></li>
  13.   </ul>
  14. </div>
  15. <h2><a id="contents-1">H2見出し</a></h2>
  16. <h3><a id="contents-2">H3見出し</a></h3>

ページ内リンクは上の赤色と水色の行のように、目次リンクのhrefと飛び先のidをそれぞれ同じ名前にしてください。こうすることでその場所までページ内リンクで飛ぶことができます。

CSSで見た目を整える

HTMLができたので、次はCSSで見た目を整えていきましょう!
当ブログで使用している目次と同じデザインのCSSになります。

CSSを編集する際は、念のためバックアップを取ることをおすすめします!
また、親テーマのCSSを編集すると、テーマの更新があった際にカスタマイズしたCSSが消えてしまうので、「スワロー」では子テーマの使用が推奨されています。
  1. .contents-list {
  2.     width: 100%;
  3.     padding: 25px;
  4.     background: #FFF; ※背景の色
  5.     border: 1px solid #ccc; ※枠線の色
  6. }
  7. .contents-list a {
  8.     color: #5cbfc3; ※リンクの色
  9.     text-decoration: none;
  10.     transition: all 500ms ease-out;
  11. }
  12. .contents-list a:hover {
  13.     color: #c1f3f5; ※リンクにホバーした時の色
  14.     text-decoration: underline;
  15. }
  16. .contents-list .title {
  17.     margin: 0 0 25px;
  18.     padding: 0;
  19.     font-size: 18px;
  20.     line-height: 1;
  21.     text-align: center;
  22. }
  23. .contents-list.hide .title {
  24.     margin: 0;
  25. }
  26. .contents-list ul.list {
  27.     margin: 0;
  28.     padding: 0;
  29.     list-style-type: none;
  30.     transition: all 300ms ease-out;
  31. }
  32. .contents-list.show ul.list {
  33.     height: auto;
  34.     opacity: 1;
  35. }
  36. .contents-list.hide ul.list {
  37.     height: 0;
  38.     opacity: 0;
  39.     overflow: hidden;
  40. }
  41. .contents-list ul.list li {
  42.     margin: 0 0 20px;
  43.     padding: 0;
  44.     font-size: 18px;
  45.     line-height: 1;
  46. }
  47. .contents-list ul.list li:last-child {
  48.     margin: 0;
  49. }
  50. .contents-list ul.list li.indent {
  51.     padding: 0 0 0 30px;
  52.     font-size: 16px;
  53. }
  54. .contents-list ul.list li:before {
  55.     display: none;
  56. }

※印で書いた箇所のカラーを変更すれば、好みのカラーにすることができるのでお試しください^^

また最後の赤字で書いた.contents-list ul.list li:beforeのセレクタですが、「スワロー」だと何故かリストの横に●が自動で入ってしまうので、display: noneで要素を消しています。
※「スワロー」以外のテーマでは必要ないかもしれません。

さて、これで下のような目次のデザインが完成しました。
これでとりあえずはページ内リンクを設定すれば目次として使うことができます♪

しかしこのままでは[ hide ]で目次を閉じることができません。
ここは動的な処理が必要になりますので、JavaScriptでプログラミングしていきます。

JavaScriptで目次を開閉できるようにする

下記がプログラミングしたソースコードになります。

  1. const contentsList = function () {
  2.     const body = document.querySelector( 'body' ),
  3.           container = document.querySelector( '.contents-list' );
  4.     if ( body.classList.contains( 'single' ) === true && container !== null ) {
  5.         const btn = document.querySelector( '.toggleBtn' ),
  6.               list = document.querySelector( '.contents-list ul.list' );
  7.         let listH = list.clientHeight;
  8.         btn.addEventListener( 'click', function ( e ) {
  9.             e.preventDefault();
  10.             container.classList.remove( 'show' );
  11.             container.classList.remove( 'hide' );
  12.             if( listH === 0 ) {
  13.                 container.classList.add( 'show' );
  14.                 btn.textContent = 'hide';
  15.             } else {
  16.                 container.classList.add( 'hide' );
  17.                 btn.textContent = 'show';
  18.             }
  19.             listH = list.clientHeight;
  20.         }, false );
  21.     }
  22. };
  23. contentsList();

このコードでは、[ hide ]ボタンを押したとき大枠の.contents-listに(hideクラス)を付与し、heightを0にすることで目次を閉じる、ということをやっています。
また開閉の際は[ hide ]⇔[ show ]にテキストを書き換えています。

ということで、完成しました!
実際の動作は、ページTOPの目次をご確認ください♪

モチ
やっぱり、目次があると使いやすい~!

最後に

今回は目次の自作方法をご紹介しました。
プラグインは便利でいいのですが、あまり追加するとサイトが重くなってしまうという弊害もありますので、自作版の目次を導入してみてはいかがでしょうか。

それでは、また次回!

モチ
いつも読んでいただき、ありがとうございますっ