Twitterはこちら仕事依頼はこちら

【Cocoon】スマホで目次を追従させる方法

Cocoonでスマホで目次追尾

スマホでブログを見ると横がせまい分、縦長になりがちですよね。

長いコンテンツの途中で「もういいや。」と離脱されてしまっては困ります。

読みたいところだけ読めるように、そして探しやすく」するため、スマホでも目次を追尾させました。

動作確認のデモは当ブログです。スマホで見てみると右下に目次が表示されるかと思います。

この記事はCocoon利用者限定のカスタマイズになります。

少しでも使いやすくして、離脱率の減少を防ぎましょう!

このカスタマイズはコピペでできるようになっていますが一部、位置や色など自身で変更してもらう箇所があります。

ちなみにAMPでは利用できません

編集するファイル
  • style.css
  • footer-insert.php
  • function.php
修正情報

2019.09.24:見やすさアップのCSS変更、追記

Cocoonでスマホ時に目次を追尾させる方法!

手順は以下の通りです。

手順
  • STEP1
    CSSコピペ
    style.cssにコードをコピペします。
  • STEP2
    コードコピペ
    footer-insert.phpにコードをコピペします。
  • STEP3
    PHPコピペ
    function.phpを作成します。
  • STEP4
    ウィジェット追加
    ウィジェットを設定します。

STEP1:CSSをコピペ

下記コードをコピペしてください。

メモ

「外観→テーマエディター→style.css(子テーマ)」。もしくは、「外観→カスタマイズ→追加CSS」に貼り付けてください。

/************************************
** スマホ追尾目次
************************************/
#mobile-toc-widget-wrap .menu-trigger,
#mobile-toc-widget-wrap .menu-trigger span {
  display: inline-block;
  transition: all .4s;
  box-sizing: border-box;
}
#mobile-toc-widget-wrap .menu-trigger {
  position: relative;
  width: 25px;
  height: 35px;
}
#mobile-toc-widget-wrap .menu-trigger span {
  position: absolute;
  left: 0;
  width: 100%;
  height: 3px;
  background-color: #fff; /* 三本線色 */
  border-radius: 4px;
}
#mobile-toc-widget-wrap .menu-trigger span:nth-of-type(1) {
  top: 13px;
}
#mobile-toc-widget-wrap .menu-trigger span:nth-of-type(2) {
  top: 20px;
}
#mobile-toc-widget-wrap .menu-trigger span:nth-of-type(3) {
  top: 27px;
}
#mobile-toc-widget-wrap .menu-trigger.active {
  -webkit-transform: rotate(360deg);
  transform: rotate(360deg);
}
#mobile-toc-widget-wrap .menu-trigger.active span:nth-of-type(1) {
  -webkit-transform: translateY(20px) rotate(-45deg);
  transform: translateY(20px) rotate(-45deg);
  top:0;
}
#mobile-toc-widget-wrap .menu-trigger.active span:nth-of-type(2) {
  -webkit-transform: translateY(0) rotate(45deg);
  transform: translateY(0) rotate(45deg);
}
#mobile-toc-widget-wrap .menu-trigger.active span:nth-of-type(3) {
  opacity: 0;
}
#mobile-toc-widget-wrap{
  position: fixed;
  bottom: 50px;
  right: 20px;
  margin: 0;
  padding: 0;
  z-index:5;
  counter-reset: mobile-toc;
}
#mobile-toc-widget-wrap label .mobile-toc-button {
  width: 58px;
  height: 58px;
  border-radius:50%;
  background: #f6a068; /* ボタン色 */
  box-shadow: 0px 2px 6px rgba(0, 0, 0, 0.16);
  transition: ease-out 0.3s;
  text-align:center;
  position:relative;
  z-index: 3;
}
#mobile-toc-widget-wrap label .mobile-toc-button .mobile-toc-button-title {
  color: #fff; /* ボタン文字色 */
  font-size: 0.65em;
  letter-spacing: 0;
  position: absolute;
  bottom: 7px;
  left: 0;
  right: 0;
  margin: auto;
}
#mobile-toc-widget-wrap label:hover {
  background: #efefef;
}
#mobile-toc-widget-wrap input {
  display: none;
}
#mobile-toc-widget-wrap .mobile-toc-show {
  display:none;
}
#mobile-toc-widget-wrap input:checked ~ .mobile-toc-show {
  background:#fff;
  position: absolute;
  top: 0;
  left: 0;
  padding: 2.5em 1em;
  opacity:0.97; /* 20190924数値変更 */
  position:fixed;
  width:100%;
  height:100%;
  display:block;
  animation: 0.5s fade-in;
  -webkit-animation: 0.5s fade-in;
  overflow-y:scroll;
}
@-webkit-keyframes fadeIn { 
  0% {display: none;opacity: 0;}
  1% {display: block;opacity: 0;}
  100% {display: block;opacity: 0.93;}
}
@keyframes fade-in {
  0% {display: none;opacity: 0;}
  1% {display: block;opacity: 0;}
  100% {display: block;opacity: 0.93;}
}
#mobile-toc-widget-wrap .widgettitle{
  text-align: center;
  margin: 0 0 1em; /* 20190924数値変更 */
  color: #f6a068; /* 目次名の色 */
  font-size: 1.1em;
  letter-spacing:2px;
  font-weight:600; /* 20190924追記 */
}

#mobile-toc-widget-wrap .mobile-toc-show .toc{
  border:none;
  margin: 0 !important;
  padding: 0 !important;
}
#mobile-toc-widget-wrap .toc .toc-list > li {
  list-style-type: none !important;
  position: relative;
  margin-left: 13px;
  margin-right: 25px;
  padding-left: 32px;
  margin-bottom: 15px;
  padding-bottom: 0px;
  font-size: 1.1em;
  line-height: 1.8;
}
#mobile-toc-widget-wrap .toc a {
  font-size: 0.8em;
  font-weight:600;/* 20190924追記 */
}
#mobile-toc-widget-wrap .toc-list{
  padding:0 !important;
}
#mobile-toc-widget-wrap .toc-list > li:before{
  counter-increment: mobile-toc;
  content: counter(mobile-toc);
  position: absolute;
  left: 5px;
  top: 5px;
  background: none;
  font-size: 0.8em;
  color: #f6a068; /* 数字の色 */
}
#mobile-toc-widget-wrap .toc_widget_list > li ol {
  margin-top: 5px;
  padding-left: 20px;
}
#mobile-toc-widget-wrap .toc-list ol{
  list-style:none;
}
#mobile-toc-widget-wrap .toc-list > li > ol > li a {
  position: relative;
  text-decoration: none !important;
  font-weight:500;/* 20190924追記 */
}
#mobile-toc-widget-wrap .toc-list > li ol li a:before {
  position: absolute;
  content: "・";
  font-size: 1.4em;
  left: -20px;
  top: -10px;
  color: #f6a068; /* 点の色 */
}

色を変更できる箇所は全てコメントを書いたのでそれに合わせてカラーコードを変更してください。

ボタンの位置を調整する

ボタンの位置にページトップボタンやメニューボタンがあって被ってしまう人は位置を変更してください。

50-51行目にあるbottomrightの数値を変更すればOK。

  • bottomは画面の下からの距離
  • rightは画面の右からの距離

になります。

スマホの画面を更新しながら確認してみてください。

STEP2:footer-insert.phpにコードをコピペ

必ずバックアップを取ってから行なってください。

メモ

バックアップはFTPソフトなどでファイルをダウンロードしておくだけでOK。

下記コードを子テーマにあるtmp-userfooter-insert.phpにコピペしてください。

<?php if ( wp_is_mobile()  && is_single()) : ?>
<?php if(is_active_sidebar('mobile_toc_widget')) : ?>
<div id="mobile-toc-widget-wrap">	
    <label for="mobile-toc">
    <div class="mobile-toc-button">
      <div class="menu-trigger">
      <span></span>
      <span></span>
      <span></span>
      </div>
     <span class="mobile-toc-button-title">目次</span>
    </div>
  </label>
    <input type="checkbox" id="mobile-toc"/>
    <div class="mobile-toc-show">
      <div class="mobile-toc-widget">	      
      <?php dynamic_sidebar('mobile_toc_widget'); ?>      
      </div>
    </div>
</div>
<script>
//スマホ目次追尾
$('#mobile-toc-widget-wrap label').on('click', function() {
    $('.menu-trigger').toggleClass('active');
});
$('#mobile-toc-widget-wrap .toc-list a').on('click', function() {
    $('.menu-trigger').toggleClass('active');
});
$('#sidebar-menu-input').on('click', function() {
    if ($('#sidebar-menu-input').prop('checked')) {
        $('#mobile-toc-widget-wrap').css('display', 'none');
    }else{
    $('#mobile-toc-widget-wrap').css('display', 'block');
  }
});
$('#mobile-toc-widget-wrap .toc-list a').click(function() {
    if ($('#mobile-toc-widget-wrap input').prop('checked')) {
        $('#mobile-toc-widget-wrap input').prop('checked', false);
    }
});

//スムーススクロール
$(function () {
 var headerHight = 50; 
 $('a[href^="#"]').click(function(){
     var href= $(this).attr("href");
       var target = $(href == "#" || href == "" ? 'html' : href);
        var position = target.offset().top-headerHight;
     $("html, body").animate({scrollTop:position}, 550, "swing");
        return false;
   });
});
</script>
<?php endif; ?>
<?php endif; ?>

各々で変更する可能性がある箇所は44行目です。

例えばヘッダーを固定している人はリンクを押したときにヘッダーの後ろに見出しが隠れてしまいます(ズレる)。

44行目の数値分、下にズラすことができるので被ってる場合は数値を変更してください。

STEP3:function.phpにコードをコピペ

コピペミスするだけでも画面が真っ白になって開かなくなる可能性があるので必ずバックアップを取ってから行なってください。

下記コードをfunction.phpにコピペします。

//目次スマホ追尾専用ウィジェット
add_action(
  'widgets_init', 
  function(){
    register_sidebar(array(
      'id' => 'mobile_toc_widget',
      'name' => '目次スマホ追尾',
      'description' => 'スマホだけに表示される追尾される目次専用エリアです。',
      'before_widget' => '',
      'after_widget' => '',
      'before_title' => '<div class="widgettitle">',
            'after_title' => "</div>\n"
    ));
  }
);

ウィジェットを作成するコードです。

STEP4:ウィジェットを設定

外観ウィジェットを開きます。

目次スマホ追尾という項目が増えているのでそこに目次を追加してください。

cocoon目次ウィジェット

タイトルは自由に変更してください!

以上で終了になります。

お疲れさまでした!

コメント

  1. 今回も素敵なカスタマイズありがとうございます。
    早速実装させていただいたのですが、無事目次のアイコンが記事右下に出るものの
    開いても目次が表示されず、真っ白になってしまいます。

    おそらくですが目次をデフォルトでたたむカスタマイズを入れていることが原因かなと思うのですが、カスタマイズ内容によってはおこりえるものなのでしょうか。

    こんな初歩的な質問ですいません・・・

    • コメントありがとうございます。

      当ブログもCocoon設定で「デフォルトでたたむ」ようになっているので関係ないと思うのですが何か別のカスタマイズを入れてるのでしょうか?

      もしよければ対象のURLを教えていただけると原因が特定しやすいかもしれません。

      • 問い合わせフォームよりご対応いただきありがとうございました!
        迅速な対応、誠にありがとうございます。
        これからも応援しています、この度はありがとうございました!

      • >>
        【名前:匿名 :投稿日:2019/09/07(土) 01:52:31
        今回も素敵なカスタマイズありがとうございます。
        早速実装させていただいたのですが、無事目次のアイコンが記事右下に出るものの
        開いても目次が表示されず、真っ白になってしまいます。

        おそらくですが目次をデフォルトでたたむカスタマイズを入れていることが原因かなと思うのですが、カスタマイズ内容によってはおこりえるものなのでしょうか。

        こんな初歩的な質問ですいません・・・】

        いつも大変お世話になっております。こちらの方と全く同じ症状(開いても真っ白)になってしまい困っております。
        https://motelife-news.net/

        同時に運営中の別サイトも目次追従を試してそちらでは成功しました。
        アドセンス自動広告を適用しているしていないは関係あるのでしょうか。
        解決策をご教授していただけたら幸いです。
        宜しくお願い致します。

        • >ラフさん

          こんにちは。
          現在は非表示にしていますかね?

          原因は特定難しいのですが、もしかしたらCSSで文字色が変わってたりするかもしれません。

          • ぽんひろさんこんにちは!
            非表示にしていましたので、先ほど表示させました。
            状況は変わらずって感じです・・・。
            目次項目の見出しがあるべき場所をタップしても何も変化ないってことは
            見出しが表示できていないのでしょうか。

          • >ぽんひろさん

            追記

            元々CSSの色関係をテンプレの#f6a068を#ff00ffに変更して使っていました。
            今一度、この記事内のテンプレをそのままコピペして様子を見ましたが、
            色は変更されたものの真っ白なままでした。(現在は#ff00ffに戻しています)

          • 自己解決しました。
            Cocoon設定のスキン一覧の中にある一部のスキンと相性が悪かったようです。
            スキンを変更したら反映されました。

  2. 素敵なカスタマイズありがとうございます!

    お陰様でずっと欲しかった追尾式の目次を作成することができました!
    https://eikin-blog.com

    ありがとうございました!

    • >エイキンさん

      こちらこそありがとうございます!
      筋トレ勉強させていただきます!!

  3. いつも最高のカスタマイズありがとうございます。

    画面に目次がずっと表示されると少し気になってしまいます。

    Cocoonのように

    下にスクロール⇒消える
    上にスクロール⇒目次が表示

    このようなカスタマイズにすることは難しいでしょうか?

    • 返信遅くなりまして申し訳ございません。

      そのように変更することも可能です。
      そのためにはJavaScriptを追加する必要があります。

      希望者が多ければ記事に追記しますがいなければ個別の対応となります!
      よろしくお願いします。

  4. 毎度、とても参考にさせていただき、ありがとうございます!
    自分のブログにもこちらの目次追従機能を付けたいと思い、記載のとおりコピペをさせていただきました。

    サイト名:ミニフクロウの知恵袋
    URL:https://mini-owl.com/

    ①ほとんど問題ないのですが、ぽんひろさんのサイトでは目次のタイトルを押すと、きちんと自動で目次のポップアップが消えて、目次のタイトル部分が表示されます。
    しかし、上記のサイトでは、目次のポップアップが消えず、都度、目次のポップアップを消さないといけません。
    どうやったらぽんひろさんのサイトみたくなるのでしょうか?

    ②また、ポップアップの目次の全体像が映し出されないため、文字の大きさを変えるか、改行して全体が見えるようにしたいのですが、どこを変更すれば実現できるのでしょうか・・・?色々いじってはみたものの思うようにはいかず><

    お手数おかけしますが、ご教示お願いします。

    • すみません!解決しました・・・m(__)m

      • >ミニフクさん

        返信遅くなりまして申し訳ございません。
        解決されたようで良かったです。

  5. お世話になっております。

    本記事を参考にスマホで目次を追従させてみました。
    おかげさまでとても気に入っております。

    紹介していただければ幸いです。

    https://wabisabist.com/

    • >わびさびすとさん

      ありがとうございます。

      ぜひ紹介させていただきたいのですが条件を設けております。
      大変恐縮なのですがブログでこの記事を紹介いただくかSNSで紹介していただく方のみとさせてもらってます。

      すでにご紹介いただいていたら大変申し訳ございません。

  6. いつも素敵なカスタマイズありがとうございます。

    目次スマホ追尾のウィジェットが表示されない原因としてどんなものが考えられますか?

    「外観→テーマエディター→style.css(子テーマ)」。
    「外観→カスタマイズ→追加CSS」
    のいずれにコピペし直しても変化ありません。

    ログインし直しても変化がなかったのですが、他にどのような原因が考えられますか?

    • >ごろゴマさん

      こちらこそありがとうございます!

      ウィジェットが表示されないのはfunctions.phpのコードが反映されてない可能性が高いです!

      • ご返信ありがとうございます。

        親テーマでもうまくいかなかったですが他にphpコードが反映されない原因としてどのようなことが多いでしょうか?(-ω-;)

        • ぽんひろさん!ぽんひろさん!できました(´;ω;`)

          cocoon親テーマでないと表記しないんですね
          ありがとうございます!!
          やっとできた~本当にいい機能ありがとうございます!!!

          • よかったです!が、親テーマはアップデートすると消えてしまうので子テーマでの編集がオススメです!

ページトップへ