【追記】記事をまとめてから気づいたけど、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ソフトを使ってもいいですし、ダッシュボードの外観→テーマの編集から直接書き込んでも構いません。
これ、何をしているかというと、以下の図の通りです。
一行目の
1 |
add_filter( 'sidebars_widgets', 'wpsites_remove_sidebar_widget' ); |
では、
sidebars_widgets
があったら、wpsites_remove_sidebar_widget
を実行してね!という命令を出しています。
add_filter
は、WordPress内で有効な関数で、リファレンスを見るに、関数を指定して、フィルターが適用された時に別の関数を呼び出すことができるようです。
何言ってるか分からん、という方。
説明しているパプリ子自身も、あまり良く分かってませんが、WordPressにプリセットで入っている関数に、特定の値(文字列)を代入することで、動かしています。
とりあえず、元からある関数(指令)を別の司令に置き換えることができるよ!ってことだと思います。
1 2 3 4 5 |
/** * @link http://wpsites.net/wordpress-tips/ways-to-remove-sidebar-widgets/ */ |
2〜4行目(コメントアウト部分)は、この関数を作った人のサインみたいなものなのでスルーして頂いて大丈夫です。
で、5〜8行目。
さっきsidebars_widgets
を置き換えて代わりに呼び出した関数、wpsites_remove_sidebar_widget
。
これの中身についての記載(関数の定義)です。
1 2 3 4 |
function wpsites_remove_sidebar_widget( $sidebars_widgets ) { $sidebars_widgets['$sidebar_id'] = false; return $sidebars_widgets; } |
wpsites_remove_sidebar_widget
という関数は、何をしなければならないかというと、まずはじめに$sidebars_widgets
という引数を受け取ります。この箇所ですね。
1 |
function wpsites_remove_sidebar_widget( $sidebars_widgets ) |
で、それに続けた司令。
1 |
$sidebars_widgets['$sidebar_id'] = false; |
(連想)配列$sidebars_widgets
の中の変数$sidebar_id
を、false(偽)に書き換えます。
配列って何、ってひと。調べてみてください。
とりあえず、変数をグループ化したものを、配列と呼びます。
1 |
return $sidebars_widgets; |
そうして処理を終えた関数wpsites_remove_sidebar_widget
は、$sidebars_widget
を結果として返します。
でも、関数wpsites_remove_sidebar_widget
の結果として返ってくる処理の$sidebars_widget
って、冒頭のこの部分で置き換えられた関数ですよね?
てことは、関数の置き換えが意味を成してないじゃん!!!!!と、パプリ子は思ったのですが、配列の中の特定の変数だけは、falseに書き換えられているんです。
つまり、フィルターをかけることで、関数自体に変更を加えることなく、特定の要素だけいじることができている、ということです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php add_filter($A,$B); //関数$Aを関数$Bに置き換えるためのフィルターフック function B($A){ //関数$Aに置き換えた、関数$Bの定義 $A['$A_n'] = false; //配列$Aの要素の一つである変数$A_nをfalseに書き換える return $A; //関数$Bの結果として、関数$Aを返す。 //add_filter関数によって、関数$Aは関数$Bに置き換えられているが、関数$Bが返す値が関数$Aなので、置き換えは意味を成していない。 //けれども、関数$B内で、「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’]の箇所に、調べたサイドバー名をペーストします。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php add_filter( 'sidebars_widgets', 'wpsites_remove_sidebar_widget' ); /** * @link http://wpsites.net/wordpress-tips/ways-to-remove-sidebar-widgets/ */ function wpsites_remove_sidebar_widget( $sidebars_widgets ) { $sidebars_widgets['$sidebar-1'] = false; return $sidebars_widgets; } ?> |
こんな感じですね。
これで、全てのページのサイドバーが消えたと思います。
本当は、この記事で条件分岐タグを使って特定のページのサイドバーだけを外す方法についても書こうと思っていたのですが、あまりにも長くなりそうだったので、分割します。
次回の記事では、条件分岐タグを使って特定のページのサイドバーだけを外す方法をご紹介します。
次の記事↓↓↓