親テーマで指定されたファンクションを子テーマから上書きする方法

  • このエントリーをはてなブックマークに追加
  • Pocket
  • LINEで送る

こんにちは、WPホームページ研究所の運営サポートチーム(@WP_LABO)です。

テーマ側で指定されたファンクション(関数)をオーバーライドする方法をご紹介いたします。

親テーマで指定されたファンクションを子テーマから上書きする方法

以前に親テーマ側のエラーでClassic Editorでエラーが出ている現象を解説させていただきました。

THE THORでClassic Editorのエラーを回避する

詳しくは下記をご覧いただけますと幸いです。

子テーマ側で別名の関数を準備しなければならない場合

本記事では子テーマからファンクションを上書きする方法をまとめておきます。ポイントは親テーマ側で定義している関数と同じ名前を使うとエラーが出る点ですね。別名で準備しなければなりません。

// 子テーマ側でオーバーライド用のファンクションを定義する
function child_fit_mce_external_plugins( $plugin ) {
	$plugin['table']                = get_template_directory_uri() . "/admin/js/tinymce.min.js";
	$plugin['custom_button_script'] = get_template_directory_uri() . "/admin/js/tinymce.js";
	$plugin['custom_textcolor']     = get_template_directory_uri() . "/admin/js/tinymce-custom-textcolor.js";
	return $plugin;
}

// 親テーマ側のファンクションを無効化して上書き用の関数実行を再定義
function child_theme_after_functon_insert() {
	// 大元の関数を無効化
	remove_action('mce_external_plugins', 'fit_mce_external_plugins');
	// 上書き関数 
	add_filter('mce_external_plugins', 'child_fit_mce_external_plugins');
}

// テーマのセットアップが終わった後に再定義したファンクションを実行する
add_action('after_setup_theme', 'child_theme_after_functon_insert', 20);

ちなみに「after_setup_theme」は「plugins_loaded」よりも後で実行されるのでプラグインの上書きも可能。

親テーマ側が子テーマでの同名関数を許可している場合

親テーマ側で下記のように定義されている場合は子テーマ側で同じ名前の関数を書いてもエラーになりません。

if ( !function_exists( 'fit_mce_external_plugins' )) {
	function fit_mce_external_plugins( $plugin ) {
		$plugin['table']                = '//cdn.tinymce.com/4/plugins/table/plugin.min.js';
		$plugin['custom_button_script'] = get_template_directory_uri() . "/admin/js/tinymce.js"; // ビジュアルエディタ追加機能用
		$plugin['custom_textcolor']     = get_template_directory_uri() . "/admin/js/tinymce-custom-textcolor.js";
		return $plugin;
	}
	add_filter( 'mce_external_plugins', 'fit_mce_external_plugins' );
}

上記の書き方を「プラガブル関数」と呼びます。子テーマやプラグインでの上書きを想定した記述方法ですね。親テーマ側の処理が「もし同名の関数が存在しない場合は実行する」という条件分岐なので上書きができます。実際に子テーマ側に同じ関数名の「fit_mce_external_plugins」を書いてもエラーはできません。

function fit_mce_external_plugins( $plugin ) {
	$plugin['table']                = get_template_directory_uri() . "/admin/js/tinymce.min.js";
	$plugin['custom_button_script'] = get_template_directory_uri() . "/admin/js/tinymce.js"; // ビジュアルエディタ追加機能用
	$plugin['custom_textcolor']     = get_template_directory_uri() . "/admin/js/tinymce-custom-textcolor.js";
	return $plugin;
}
add_filter( 'mce_external_plugins', 'fit_mce_external_plugins' );

ワードプレスは色々な指定方法が用意されていますね。他にも「apply_filters」を用いて子テーマから上書きする方法もあります。どんな書き方が適切かはそのテーマの構造によっても変わります。

子テーマで細かいカスタマイズを行う場合はぜひご参考くださいませ。

最新式の無料プラグインを事前公開

WordPressは公式サイトに登録済みのプラグインだけで全機能を補足しきれません。当サイトでは使いやすさを追求した魅惑的なプラグインを無料でダウンロードいただけます。運営ホームページのマーケティング力をさらに高めるチャンスです。まずは無料でDLしてお試しくださいませ。
改良されたプラグインを確認する

ワードプレス専門家に丸投げする

WPホームページ研究所はワードプレスを中心としたブログ作成・ホームページ制作・オウンドメディア構築・プラグイン設定・調整など幅広いカスタマイズに対応しております。 記事の掲載情報だけでなくお好みの機能をいただければ専属スタッフが心を込めて真摯に対応させていただきます。お気軽にお問い合わせください。

お問い合わせの種類をお選びください(もっとも近い項目)

法人の場合は法人名とご担当者のお名前をご入力ください

返信時のご連絡に利用するメールアドレスをご入力ください

運営中のウェブサイトURLがあればご入力ください

お困りの内容があれば詳しい内容をお聞かせください