通常、子テーマでカスタマイズを行なっていると、親テーマへ上書きされる形になりますが、functions.phpだけは例外となります。
今回は、定義済みのメディアサイズの上書きを例にとって進めてみます。

functions.phpが上書き出来ない理由

  • CSSのセレクタやJavaScriptと違い、PHPでは関数の重複が出来ずエラーになってしまいます。
  • 読み込み順がfunctions.phpだけは、子テーマ→親テーマとなってしまいます。

ならば、親テーマを編集… というのは、どうしても避けたい所。

上書きの方法

親テーマに !function_exists がある場合

先ほど、関数の重複はできない と書いたばかりですが、例外があります。
親テーマ内で !function_exists が使用されていると、子テーマ内でそのまま上書きが可能です。
こういった関数はプラグアブル関数と呼びます。

//foo という関数が既に定義されているか?
if ( ! function_exists( 'foo' ) ) {
//定義されていない場合はfooを定義する
    function foo() {
        //何かしらの処理
    }
}

親テーマに !function_exists がない場合

この場合は、単純に読み込み順序を変更してあげます。
仮に親テーマにこのように画像サイズが定義されているとします。

add_image_size( ‘custom-mid-size’, 700, 400, true );

この custom-mid-size のサイズを変更してみます。
例として width : 700px height : 400px → width : 600px height : 340px としてみます。

//custom-mid-size の画像サイズをオーバーライド
function change_custom-mid-size() {
  add_image_size( 'custom-mid-size', 600, 340, true );
}
add_action( 'after_setup_theme', 'change_custom-mid-size', 11);

add_actionの$priority(優先順序)の初期値が10のため、11としました。

【add_actionの詳細はこちら】
関数リファレンス/add action – WordPress Codex 日本語版

【おまけ】「Regenerate Thumbnails」プラグインでサムネイル画像を再生成

定義しただけでは画像はリサイズされないため「Regenerate Thumbnails」プラグインでアップロード済みの画像をリサイズしましょう。
ちなみに、ツール→Regenerate Thumbnails→Thumbnail Sizes では現在定義されている画像サイズの一覧を確認することができます。

1 件のコメントが “【WordPress】functions.phpを子テーマでオーバーライド(上書き)する” にあります。

  1. ピンバック: 【WordPress】functions.phpを子テーマでオーバーライド(上書き)する | 便利?みさわのリンク集

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です