パプリコ!

【WordPress】サイドバーウィジェットを消す方法

 

【追記】記事をまとめてから気づいたけど、Simplicity2の場合、「ページ設定」→「本文のみor1カラム」で、これと同じことができるんだね!!!!無駄足踏んじまったぜ〜♪

ナマスカーラ!パプリ子です。
今回は、functions.phpにコードを追加して、WordPressの特定のサイドバーウィジェットを外す方法をご紹介します。
パプリ子がこのブログでも使っているSimplicity2を例として引いていますが、サイドバー名が分かれば、他のテンプレートでも応用可能だと思うので、興味がある方は参考にしてみてください。

 

display:none;を使ったカスタマイズは自由度が低い

ブログをはじめるにあたって、パプリ子がまず最初にやったのが、この、「サイドバーを消す方法」を調べることでした。
simplicity2の公式フォーラムにも回答があり、また、作者のわいひらさんも記事を書かれているのですが、そのカスタマイズがcssのdisplay:none;を用いてサイドバーを非表示にする、というやり方でした。


もちろん、これが一番かんたんで手っ取り早いとは思うのですが、この方法だと特定のスラッグ(URL)のページのみ、サイドバーを消すとか特定のページの特定のサイドバーのみ消すといったことができず、自由度が低いな、と感じたのでPHPで関数をつくって解決する方法をご紹介します。

このブログ内ですと、パプリ子についてプライバシーポリシーのページに、これからご紹介するカスタマイズが適用されています。

「自分のやりたいこととなんとなく似てるな」という方は参考にしてみてください。

大まかな流れと必要なスキル

流れとしては、外したいサイドバーの名前を調べて、functions.phpにサイドバーを外すための関数を追加するという、とても単純な手順です。

この記事でのカスタマイズのは、基本的にコピペでOKなので、特別にPHPやHTML/CSSの知識がなくても大丈夫です。

が、分からない箇所や、できなさそうな箇所があったら、適当に検索してみてくださいね。
Googleはいつでもあなたの友だちです。

パプリ子はひねくれ者なので、大抵の「コピペでOK」系のカスタマイズブログを参考にコーディングをすると、「やりたいことは出来たけど、何がどうなって実現できたか分からなくて気持ち悪い」という感想を抱いてしまします。
なので、この記事ではパプリ子の貧弱な知識を元に、「このコードがどういう働きをしているか」も、できる限り解説していきます。

①子テーマのfunctions.phpにサイドバーを外すための関数を追加する

以下の記事を参考に、サイドバーを外すためのオリジナル関数を作成します。

これをそのままコピーして、子テーマ内のfunctions.phpに貼り付けてください。
推奨はしませんが、親テーマをそのまま使っている場合は、functions.phpの一番下に追加しましょう。
ただその場合、親テーマが更新されるごとに、同じコードを記述してくださいね。

FTPソフトを使ってもいいですし、ダッシュボードの外観→テーマの編集から直接書き込んでも構いません。

これ、何をしているかというと、以下の図の通りです。

一行目の

では、
sidebars_widgetsがあったら、wpsites_remove_sidebar_widgetを実行してね!という命令を出しています。
add_filterは、WordPress内で有効な関数で、リファレンスを見るに、関数を指定して、フィルターが適用された時に別の関数を呼び出すことができるようです。

何言ってるか分からん、という方。
説明しているパプリ子自身も、あまり良く分かってませんが、WordPressにプリセットで入っている関数に、特定の値(文字列)を代入することで、動かしています。
とりあえず、元からある関数(指令)を別の司令に置き換えることができるよ!ってことだと思います。

2〜4行目(コメントアウト部分)は、この関数を作った人のサインみたいなものなのでスルーして頂いて大丈夫です。

で、5〜8行目。
さっきsidebars_widgetsを置き換えて代わりに呼び出した関数、wpsites_remove_sidebar_widget
これの中身についての記載(関数の定義)です。

wpsites_remove_sidebar_widgetという関数は、何をしなければならないかというと、まずはじめに$sidebars_widgetsという引数を受け取ります。この箇所ですね。

で、それに続けた司令。

(連想)配列$sidebars_widgetsの中の変数$sidebar_idを、false(偽)に書き換えます。

配列って何、ってひと。調べてみてください。
とりあえず、変数をグループ化したものを、配列と呼びます。

そうして処理を終えた関数wpsites_remove_sidebar_widgetは、$sidebars_widgetを結果として返します。

でも、関数wpsites_remove_sidebar_widgetの結果として返ってくる処理の$sidebars_widgetって、冒頭のこの部分で置き換えられた関数ですよね?

てことは、関数の置き換えが意味を成してないじゃん!!!!!と、パプリ子は思ったのですが、配列の中の特定の変数だけは、falseに書き換えられているんです。
つまり、フィルターをかけることで、関数自体に変更を加えることなく、特定の要素だけいじることができている、ということです。

多分、こういうことだと思います。
falseに書き換えることで無理矢理エラーを起こして、特定のサイドバーが動かないようにしている、という感じでしょうか。

ちなみに、参考にしたBrad Daltonさんの記事には、もうひとつの解決法があります。

何をしているのか、なんとなくこっちのが分かりやすいですね。
最初にご紹介したものと同様に、sidebars_widgetsにフィルターをかけるところまでは一緒。
置き換えた関数の名前と定義だけが、異なりますね。
こちらは関数wpsites_unset_sidebar_widgetの中でunset(指定した変数を破棄する処理)を実行しているので、(連想)配列$sidebars_widgetsの中の変数$sidebar_idが、消されています。

サイドバーを動かなくする、というよりは、「特定のサイドバーの存在自体を抹消する」のほうがニュアンス的に近いかもしれませんね。



②親テーマ内で、外したいサイドバーの名前を調べて、コピペ

Simplicity2の場合は、ダッシュボード→外観→テーマの編集→(親テーマ)→サイドバー の順番に、テーマファイルを見て行きます。
他テーマをお使いの方や、子テーマが適用されていない方は、外観→テーマの編集→functions.php(テーマのための関数)の中などを、「sidebar」や「widget」といったワードで検索してみてください。
Macの方はcommand(⌘)+F、Windowsの方はCtrl+Fで、検索できますよ。

子テーマが適用されている場合は、「この子テーマは親テーマSimplicity2のテンプレートを引き継ぎます」というリンクから親テーマにアクセスしましょう。

それから、「サイドバー」という項目を探し、消したいサイドバーの名前を調べます。
今回は、純粋にページ右側(もしくは左側)のサイドバーを消したいので、「sidebar-1」が該当するサイドバー名です。

その下の、スクロール追従領域のサイドバーを外したい場合は、「sidebar-scroll」をサイドバー名として控えておきましょう。

そうしたら、先程①でfunctions.phpに貼り付けたコードの[‘$Sidebar_id’]の箇所に、調べたサイドバー名をペーストします。

こんな感じですね。

これで、全てのページのサイドバーが消えたと思います。
本当は、この記事で条件分岐タグを使って特定のページのサイドバーだけを外す方法についても書こうと思っていたのですが、あまりにも長くなりそうだったので、分割します。
次回の記事では、条件分岐タグを使って特定のページのサイドバーだけを外す方法をご紹介します。

次の記事↓↓↓