ご注意下さい
この記事は3年以上前に書かれた記事ですので、内容が古い可能性があります。
短い記事です。
便利に利用させてもらっているEasy Table of Contentsプラグインですが、トップページになぜか最新記事の目次が表示されてしまっているのに気付きました。
トップページに目次が表示されている
まず事象の確認ですが、本ブログではサイドバーに目次ウィジェットを配置しています。読者に対してページ内をナビゲートするのに利用中です。ところが、以下の画像の通り、トップページの右側に「この記事のもくじ」が表示されてしまっていることに気付きました。
記事一覧の一番上の記事の目次を引っ張ってきてしまっています。一番上の記事本文に目次がない場合にはトップページでも目次は表示されずにしばらく気付きませんでした。
何がいけないのかよく分からず四苦八苦しましたので、解決方法について共有しておきます。同じような事象で悩まれている方がいましたら参考にしてください。
Easy TOCプラグインの修正
プラグイン本体を修正します。直接plugins/easy-table-of-contents/includes/class.widget-toc.phpを修正してしまってもいいですが、WordPress管理画面のメニュー→「プラグイン」→「プラグインエディター」から編集するプラグインを選択で「Easy Table of Contents」を選択し、includesディレクトリ配下のclass.widget-toc.phpを選択することでも修正可能です。
修正箇所は139行目です。404ページ、アーカイブページ、検索ページの場合は処理を抜ける(=目次を作らない)、もしくはフロントページではないが、トップページである場合は処理を抜ける、という意味になっています。
なんでフロントページではないがトップページである場合としたのかは分かりませんが(この条件に当てはまるのはトップページではないフロントページの場合は目次を作成、ということですが、どのような場合?)、この部分を以下のように修正します。
public function widget( $args, $instance ) {
//if ( is_404() || is_archive() || is_search() || ( ! is_front_page() && is_home() ) ) return;
if ( is_404() || is_archive() || is_search() || is_front_page() || is_home() ) return;
global $wp_query;
$css_classes = '';
フロントページの場合もトップページの場合も目次は作成せず処理を抜けるように修正します。
フロントページとホームページ(トップページ)の違いについての解説は他の方にお任せしますが、私のトップページでは最新の投稿を表示していますのでis_front_page()もis_home()もTrueを返却します。!True(=False)&&True→Falseですので目次作成処理に入ってしまいます。
上記修正をすることで無事にトップページから目次を消すことができました。
注意ポイント
プラグインのアップデートをした際には、修正したコードが消えてしまいますので再度設定が必要となります。
記事は以上