ワードプレスでプラグインやテーマを直接改造せずに処理を行ったり、値を書き換えたりする方法について解説いたします。

任意の別のプラグインやテーマの処理に割り込むdo_action関数

ワードプレスには任意の処理に割り込むdo_action、任意の処理の結果の値を置き換えるapply_filtersという仕組みがあります。

この二つは、プラグインやテーマで独自に実装されている物にもプログラムで割り込むことが出来ます。

例えばcontact form7にはdo_action( ‘wpcf7_mail_sent’, $contact_form ); というコードがsubmission.phpにありますが、これは製作者がここに処理を割り込ませて何かしてもいいよ と製作者の方が許可している部分になります。
(製作者自体が内部処理でこのアクションを使用している場合もあります)

例えば下記のようにadd_actionで’wpcf7_mail_sent’に割り込んで、処理を追加することが出来ます。
※下記コードはテーマのfunctions.phpや作成されているプラグイン等に記載すると動作します。(この為プラグインやテーマ本体を書き換えずに処理を追加することが出来ます)

add_action('wpcf7_mail_sent', 'my_custom_mail_sent_function' );//'my_custom_mail_sent_function' が割り込んで実行する関数名です

function my_custom_mail_sent_function( $contact_form , 10 , 1 ){
     $form_id = $contact_form->id();
     //何らかの処理
}

ポイント
do_action には add_actionで割り込み。 
do_action で変数を渡している場合は、その変数の数をadd_actionで指定(上記コード例の1の部分になります)すればその変数も受け取れる。

※( $contact_form , 10 , 1 )の10は割り込み関数の優先度を示します。10は一般的な普通の優先度です。

任意の別のプラグインやテーマの結果の値を加工できるapply_filters関数

また、テーマやプラグインが作成した値を置き換えることが出来るapply_filters関数という物もございます。
こちらは処理も可能で、値も加工して差し戻せるのでより強力な割り込み関数と言えます。

例えば、cocoonという著名なテーマの seo.phpにはapply_filters(‘title_parts_custom’, $title); というフィルタが適応されています。
このフィルタはページタイトルの本体や、サイト名等を加工できるように製作者の方が用意してくれているフィルタです。

このフィルタに割り込んで値を加工することが可能です。

add_filter('title_parts_custom', 'title_parts_custom_func', 10, 1 );
function title_parts_custom_func($title) {
    $title['title']=$title['title']." a";//受け取った変数を加工しaを追記
    return $title; //returnで返還すると値が加工されたものが使用される
}

ポイント
apply_filters には add_filterで割り込み。 
apply_filters で渡している変数は、加工してreturnで返還すると差し戻して使用される。

add_actionやadd_filterで他のテーマやプラグインに割り込む処理を創るときのご注意点

あまりない事ではありますが、do_actionやapply_filterはその製作者の方がバージョンアップ等で、削ってしまったり渡している値の数や内容を変えてしまう事があります。
消えてしまった場合は特にエラーは出ませんが、何も処理されないという事になります。値の種別や内容が変わった場合はその後の処理の仕方によってはエラーが出たりすることもございます。
この場合、その割り込んでいる処理も書き換えたりする必要がある場合があります。

WordPress ワードプレスサイトのテーマやプラグインおカスタマイズのご依頼・ご相談はWPドクターまでお気軽にお送りください