ワードプレスで子テーマのようにプラグインの関数をプラグイン本体を書き換えず(プラグインをアップデートできる形)でカスタマイズすることは可能なのか?について解説いたします。

プラグインの本体を書き換えずに、プラグインの関数の動作を置き換える

ワードプレスには子テーマという仕組みがあり、テーマ本体をアップデートしてもカスタマイズを消さないようにすることが可能です。しかしプラグインにはそのような仕組みがございません。プラグインでもプラグインの本体を書き換えずに、プラグインの関数の動作を置換することは可能なのでしょうか?
こちらは条件付きで可能ございます。

例えば、下記のような関数がプラグインにあったとします。

if ( ! function_exists( 'pluginfunction' ) ) {
    function pluginfunction() {
        return "A";
    }
}

この場合function_exists( ‘pluginfunction’ ) で他に同名の関数があればそちらを優先するという意味になりますので、ワードプレスのmu-plugin(Must-use プラグイン)の仕組みを使えばこの関数を置き換えることが可能です。

※function_exists( で関数が囲われていることが必須条件となります。囲われていない場合mu-pluginで定義した関数と2重定義となりエラーを引き起こします
プラグインがフック(そのプラグインの処理に割り込むadd_actionやadd_filter処理)を提供している場合もあります。mu-pluginで関数を置換する方法はフックがない時の手段となります。

ワードプレスの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ドクターまでお気軽にお送りください