2015年7月31日

テーマ関数ファイルを宣言する。functions.phpって何でしょう?

スポンサードリンク

 WordPressで避けて通れない問題は、functions.phpをどうカスタムするか。
一歩間違えるとサイトはおろか、管理画面まで真っ白になります。

テーマ内にあるファイルがここまで影響するとは驚きですね。



functions.phpとは何ぞや?



 WordPressのテーマ。
Twenty Fifteenとか、Stingerとか、Materialとか。

その中にfunctions.phpというファイルがあります。


 そもそもテーマには、ヘッダーを指定するheader.phpがあったり、
サイトの色や背景を指定するstyle.cssがあります。

そこに、さも同じようにあるfunctions.php。
実はちょっと特殊です。


 簡単に言うと、新しい機能を追加する事が出来ます。
まるでプラグインのように、サイトや管理画面に大きく作用します。

関数ファイル、だそうです。

難しくてよくわかりません。


functions.phpのバックアップは必須です



 まず、functions.phpの注意点をおさえておきましょう。

適当に意味不明な事を載せると、
それを宣言した事となり、サイトが壊れます。

間違う位なら触らない方が良いです。
それくらいデリケートなものです。


 ただし、上手く使いこなすと、
WordPressの管理画面にページビューを載せたり、
新しいウィジェットを追加したりと、
とても便利です。


 多くのサイトでも書かれていますが、
WordPressのファイルをいじる時は要注意です。

いじる直前に、必ず最新のバックアップを取りましょう。


 特にfunctions.phpを触る時は絶対にバックアップが必要です。
私はこのおかげで何度も助かっています。

サイトが真っ白になった事など数えきれず。

他のサイトに載ってあるとおりにカスタムしたはずであっても、
うまくいかない事は多々有ります。

だから絶対にバックアップして、すぐ元に戻せる状態にしてから
カスタムしましょう。


functions.phpを子テーマで作成する時の注意



 header.php等を子テーマで作成している事がほとんどだと思います。
私もそうです。

通常テーマは、


  • 親テーマ→親header.phpを反映し、
  • 子テーマ→子header.phpに追加したものを上書きする

という流れです。


 これが、functions.phpは違います。
子テーマのfunctions.phpが先に読み込まれるのです。

なんでなのかは分かりません。
WordPressの仕様なのでどうしようもありません。
注意して下さい。


子テーマのfunctions.php書き方


(このままコピーしないで下さい。UTF-8Nに変換して下さい。) 


 子テーマの書き方は、



<?php //開始タグ


//ここに処理を記述していきます


?> //終了タグ




こんな感じです。


 開始タグと終了タグは必ず一つだけ。

//ここに処理を記述していきます~のところに、
関数を複数追加していきます。

連続すると何の関数だか分からなくなりますね。
なので、後で分かりやすくする為に空白行を設けていくと良いでしょう。


 ただし、開始タグと終了タグの外には空白も改行も禁止です。
ここは触らず、関数を追加するところだけを触るようにします。


 さらに注意点があります。

header.php等は、親テーマに書いてある事と同じ内容を
子テーマに載せても何もありませんよね。

違う事を載せれば、そちらが上書きされる、という感じです。


 functions.phpはダメです。
親テーマに載せてある関数と同じ関数を
子テーマのfunctions.phpに宣言してはダメです。

エラーを起こし、サイトが表示出来なくなります。


 だからと言って親テーマ内のfunctions.phpをいじると、
テーマの更新の時に全てデフォルトに戻されてしまいます。

なので、出来れば子テーマfunctions.phpを作成して
そちらに載せていきたいですよね。

でも、親テーマと同じ関数は書けない。
ここでポイントなのが、

親テーマの関数に!function_exists()が記入されているかどうか。


 !function_exists()って何?


  !function_exists()とは、
もし既に同じ関数が子テーマ(先に読み込まれる)側にあれば、
親テーマにある同じ関数の宣言は無視してねという意味。


 正しい意味は、
親テーマにて宣言した関数と同じ関数が、
既に子テーマ側で宣言されていたら、
以下は読み込まないでね、という意味です。


例えば、Stingerを見てみます。

親テーマに
if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(4) )

などと記入されていれば超ラッキー。


 つまり、dynamic_sidebarは、子テーマ側に載せて大丈夫という事です。

テーマ作成者が、
利用者がいじりそうな部分をカスタム可能なようにしてくれています。
感謝しましょう。


  !function_exists()は全ての関数に指定されているとは限りません。
むしろ、数カ所だけだと思います。

どこに指定されているかはテーマによって違います。
なので、むやみにfunctions.phpを触るのはやはり要注意。


 あと、 !function_exists()に該当関数が記載されていても、
絶対カスタムして問題ないかどうかは私も分かりません。

WordPressヘルプフォーラム等で詳しくはお聞き願います。
必ずバックアップを取り、カスタムは自己責任でお願いします。

バックアップは親テーマも子テーマも両方必要ですよ。


 !function_exists()が無い時はどうするのか


(このままコピーしないで下さい。UTF-8Nに変換して下さい。)


 親テーマのfunctions.php内に !function_exists()
を自分で追加するのはおすすめしません。

ミスするとサイトが真っ白になる予感がします。
また、テーマの更新で親テーマ側はデフォルトに戻されるので要注意。


 こういう場合は、


// 親テーマの後に実行
add_action( 'after_setup_theme', 'after_all' );

を記入します。
または、

add_action( ‘after_setup_theme’, ‘twentyfifteen_setup_child 等の関数名’ )

にも出来ます。



 どういう意味かと言うと、
テーマを全て読み込んだ後に、この関数を適用してねというコードです。

このコード以下に書かれた事は、

子テーマのfunctions.php→

親テーマのfunctions.php→

全てのテーマ→

add_action( 'after_setup_theme', 'after_all' ); 


という風に読み込まれます。


超上級者向けなので、なるべく触らないでfunctions.php



 お使いのテーマのカスタムを
詳しく載せてくれているサイトがありますね。

同じ条件で、同じカスタムをするなら、
事前にバックアップを取って、functions.phpを触ってみると良いでしょう。


 自ら関数を設定して
子テーマに宣言するのはなかなかハードルが高いです。

私は絶対に今はしないですし、出来ません。

なので、他の方のサイトを参考に、マネが出来そうなものだけ
やってみたいなと思っています。


 一歩間違うと管理画面まで真っ白になります。
functions.phpを使いこなせるようになれば一人前、いや、半人前かな。


参考サイトはこちら。

WordPressをカスタマイズするなら覚えておきたいアクションフックとフィルターフック

【注意】子テーマをつくってのカスタマイズ方法 -functoins.php篇-

【Stinger5カスタマイズ】functions.phpのカスタマイズを子テーマ側で実施する方法

【WordPress】 子テーマを使ったカスタマイズについて(functions.php編)

WordPress子テーマを作成し任意のphpをカスタマイズする方法



 当ブログの情報は全ての方に応用できるとは限りません。
ご利用は自己責任です。当ブログ側はいかなる責任も負いません。

必ずデータは最新のバックアップを取っておいて下さい。


 WordPressを利用される場合はUTF-8Nの文字コードに必ず変換して下さい。

当ブログのコードをコピーしてphpファイル等に直で貼付けすると
ファイルやデータが破損します。
パソコンのメモ帳は不可です。

詳細はWordPressヘルプを参照下さい。


 ラビットしま子はサイト制作のプロではありません。
個別のカスタマイズについての相談は乗ってあげたいけど、乗れません。
(わからんから)


スポンサードリンク