ワードプレスで子テーマのようにプラグインの関数をプラグイン本体を書き換えず(プラグインをアップデートできる形)でカスタマイズすることは可能なのか?について解説いたします。
プラグインの本体を書き換えずに、プラグインの関数の動作を置き換える
ワードプレスには子テーマという仕組みがあり、テーマ本体をアップデートしてもカスタマイズを消さないようにすることが可能です。しかしプラグインにはそのような仕組みがございません。プラグインでもプラグインの本体を書き換えずに、プラグインの関数の動作を置換することは可能なのでしょうか?
こちらは条件付きで可能ございます。
例えば、下記のような関数がプラグインにあったとします。
if ( ! function_exists( 'pluginfunction' ) ) { function pluginfunction() { return "A"; } }
この場合function_exists( ‘pluginfunction’ ) で他に同名の関数があればそちらを優先するという意味になりますので、ワードプレスのmu-plugin(Must-use プラグイン)の仕組みを使えばこの関数を置き換えることが可能です。
ワードプレスのwp-contentフォルダに mu-plugins というフォルダを作り、その中に任意の名称でphpファイルを作り下記のように関数を記載します。
<?php /* Plugin Name: MUプラグイン名 Description: MUプラグイン説明文 Version: 0.1 Author: 制作者名 */ if ( ! function_exists( 'pluginfunction' ) ) { function pluginfunction() { return "B"; } }
mu-plugins フォルダにあるPHPファイルは幸先でプラグインの実行前に必ず実行されますので、こちらに定義された新しいpluginfunction が優先され、プログラムの関数の機能を置き換えることが可能です。
プラグイン本体を修正しているわけではないため、このカスタマイズはプラグインがアップデートされても有効となります。
※ただ、プラグインが大きな機能変更等が行われ、関数間のお互いの利用方法がアップデートされたプラグインで変わってしまった場合(因数の数が変わるなど)するとmu-plugins フォルダにあるPHPファイルで再定義した関数の機能がエラーを引き起こす場合がございます。何卒ご注意ください。
ご参考になりましたら幸いです。
WordPress ワードプレスのテーマやプラグインのカスタマイズ・コーディング・開発のご相談・ご依頼はWPドクターまでお気軽にお送りください