WordPress のテーマやプラグインに設定では行えない処理を追加したり表示内容を変更したりするカスタマイズを行うにはフックを使うことが必須となってきます。この記事では Welcart プラグインで使われているフックを例にフックの基本と使い方を説明していきます。
フックとは?
フックとはテーマやプラグインに新たな機能を追加したり、表示内容を変更したりカスタマイズを行うために用意されている WordPress の仕組みです。多くのテーマやプラグインではコードの中にフックを用意してくれていますので、そのフックを利用してカスタマイズを行っていきます。あらかじめ物を引っ掛けるフックが用意されていて、そこに自前で用意した物を引っ掛けることができるというイメージをしていただくとわかりやすいかと思います。
なぜフックを使うのか?
テーマやプラグインをカスタマイズする際に元々のファイルを直接編集することもできますが、元々のファイルを編集してしまうとテーマやプラグインをアップデートした際にファイルが上書きされてしまい編集した内容が無効になってしまいます。このような事態を避けテーマやプラグインをアップデートしても問題がないようなカスタマイズを行うために、カスタマイズする内容は別ファイル(主にテーマ内の functions.php)に記載しフックを利用します。テーマやプラグインを今後アップデートしない場合は、ファイルを直接編集しても問題ありませんが、後々不具合やセキュリティの脆弱性が発見された際もアップデートができなくなってしまうのでおすすめはしません。
フックの種類
フックの種類には機能を追加するアクションフックと主に表示内容を変更するフィルターフックがあります。それぞれ使い方が少し違いますが Welcart プラグインのカスタマイズではフィルターフックを使うことが多いので、ここではフィルターフックの使い方について説明します。
Welcart プラグインのフックの例(送料のカスタマイズ)
Welcart プラグインには送料を変更するフィルターフックが用意されています。プラグイン内の下記のコードでフィルターフックが準備されており元々$shipping_chargeには事前にカスタマイズされていない通常の送料の金額が保存されています。
$shipping_charge = apply_filters( 'usces_filter_set_cart_fees_shipping_charge', $shipping_charge, $carts, $entries );
こちらのプログラムのapply_filters()の部分がフィルターフックとなりusces_filter_set_cart_fees_shipping_chargeがフィルターフック名となります。フィルターフックを利用しない場合は$shipping_chargeの値はそのままとなりますが、フィルターフックを使用することによって$shipping_chargeの値を変更することができます。
フックを利用する方法
フックを利用する場合はテーマファイルにある functions.php に記載するのが一般的です。先程の送料を変更するフィルターフックを利用するには下記のコードを functions.php に記載します。add_filter()で利用するフックを指定して処理内容を記載した関数を登録します。こちらのサンプルコードは注文の条件によらず送料を 0 円にするというシンプルな内容となっておりますが、カート内の商品や選択された配送方法によって送料を変えるといった細かくカスタマイズされた送料の計算処理を記載することもできます。
add_filter('usces_filter_set_cart_fees_shipping_charge', 'customized_set_cart_fees_shipping_charge', 10, 3);
function customized_set_cart_fees_shipping_charge($shipping_charge, $carts, $entries) {
return 0;
}
フィルターフックの探し方
どのようなフィルターフックが用意されているかは実際にコードの中の apply_filters( で始まる部分を検索して確認するという方法がありますが、多くのテーマやプラグインではカスタマイズされる方向けに製作者がフック一覧をまとめてくれている場合もあります。Welcart プラグインについては下記ページでまとめられていますのでご参考にしていただければと思います。
参考サイト
apply_filters()とadd_filter()の詳しい使い方は下記ページをご参考ください。
関数リファレンス/apply filters – WordPress Codex 日本語版
関数リファレンス/add filter – WordPress Codex 日本語版
最後に
最初はわかりづらい複雑なフックの仕組みと利用方法ですが、処理の追加や表示の変更といったカスタマイズができるとても便利な機能となりますのでぜひ挑戦してみてください。下記お問い合わせフォームにてカスタマイズに関するご相談、ご依頼も受け付けております。