WordPressフックのガイド

公開: 2021-07-19

フックシステムは初心者には気が遠くなるように思えるかもしれませんが、WordPressの最も優れた点の1つです。 このガイドは、フックの基本とその使用方法を理解するのに役立ち、使用例と詳細なアドバイスを提供します。

なぜフックを使用する必要がありますか?

まだ気付いていない場合は、WordPress(WP)でコアファイルを変更すること非常に悪い考えです。 セキュリティリスクはさておき、WPを更新するたびに変更が上書きされます! プラグインとテーマについても同じことが言えます。

もちろん、すべての更新を追跡し、変更を再実装することができます。 あなたはまた、蜂蜜で取得するために蜂の巣パンチスルーができます。 便利に思えるかもしれませんが、遅かれ早かれ刺される可能性があります。

簡単に言うと、フックはコア機能を変更するリスクを相殺するため、フックを使用する必要があります

この意味で、フックの重要性は誇張することはできません これらは、WPの拡張性の鍵であり、プラグインとテーマのエコシステムの基礎です。 基本を学び、それを上手に活用することで、多くの頭痛の種を減らすことができます。

彼らは何ですか?

フックは、WPロードシーケンス全体で発生するイベントと考えることができます WPがフックに遭遇すると、続行する前にそのフックに接続されているすべての関数を起動します。

したがって、フックを利用して、WP全体で機能を追加したり変数を変更したりできます 既存のフックを使用して、新しいフックを追加できます。 不要なフックは外せます。 同じフックを複数回叩いて、適切と思われる各機能に優先順位を付けることができます。 これは非常に柔軟なシステムであり、使用可能なフックとそれらが公開するデータによってのみ制限されます。

それらはどのように機能しますか?

フックに1つ以上の関数を追加します。 他の機能も、テーマ、プラグイン、またはWP自体によって追加される場合があります。 WPがロードされると、フックに遭遇します。 フックに関連付けられているすべての関数のリストをチェックします。 WPは、これらすべての機能を優先順に実行します。 完了すると、フックの後にすべてのロードが再開されます。

彼らはどんな見た目ですか?

フックに関数を追加すると、次のようになります。

add_action($ hook_name、$ function_name、$ priority、$ arguments);

$ hook_nameは、ターゲットにするフックの名前です

$ function_nameは、そのフックに追加する関数の名前です

$優先順位はSキューの$ FUNCTION_NAME「$ hook_name内の優先順位示す整数です 数値が小さいほど、優先度が高くなります。 1から、この数値は(システム制限内で)必要なだけ高くすることができますが、40を超えることはほとんどありません。デフォルト値は10です。

$ argumentsは、関数で使用している引数の数を示す整数です。 これ、関数に渡される引数の数と一致する必要があります。 デフォルト値は1です。

フックから関数を削除することはほとんど同じです:

remove_action($ hook_name、$ function_name、$ priority);

$のFUNCTION_NAME$の優先順位は、対応するadd_action関数から元の値と一致する必要があります、または彼らは削除されません!

フックの種類

フックには、アクションフックとフィルターフックの2つの主要なタイプがあります それらは多くの点で類似しています– add_action()とそれに対応するadd_filter()は両方とも同じ方法で呼び出されます。 違いは、通過する関数にあります。


//コードを実行します
add_action( 'where_to_do_the_thing'、 'do_the_thing');
関数do_the_thing(){
//そのことを行うために必要なアクションを実行します
}

//変数を変更します
add_filter( 'the_thing'、 'change_the_thing');
関数change_the_thing($ thing){
// $ thingsをフィルタリングし、必要なものに変更してから…

$ thingを返します。
}

第二の例では、最初の引数はfunctioに渡されたN値が修正されていることに留意されたいです 追加の引数はユーティリティ専用であり、フックを介して返されることはありません。

$ priority$ argumentsを省略したことに気づいたかもしれません これは、デフォルト値で問題ないためです。 それが役立つ場合、上記は基本的に次と同じです。


//コードを実行します
add_action( 'where_to_do_the_thing'、 'do_the_thing'、10、1);
//変数を変更します
add_filter( 'the_thing'、 'change_the_thing'、10、1);

これらはもちろん不自然な例ですが、2つの主な違いを示しています。フィルターは変数を変更するためのものであり、アクションはコードを追加するためのものです。

あまり工夫されていない例

新しいユーザーがサイトに登録したときに、WPに電子メール通知を送信させたいとします。 WPコーデックスを参照すると、 user_registerアクションフックが見つかります これにより、ユーザーの詳細を取得するために使用できる$ user_id変数が提供されます wp_mail()が残りを処理します:


add_action( 'user_register'、 'notify_on_user_registration');
関数notify_on_user_registration($ user_id){

//ユーザーを取得します
$ user = get_user_by( 'id'、$ user_id);

//メールの件名と本文を準備します
$ subject = "新規ユーザー登録";
$ message =“新しいユーザー{$ user-> first_name} {$ user-> last_name}が登録されました。”;

//メールを送信します
wp_mail('[email protected] '、$ subject、$ message);
}

ログイン時にユーザーをフロントページにリダイレクトする場合はどうなりますか? これは、ユーザーがデフォルトでリダイレクトされるURLを提供するlogin_redirectフックを使用して簡単に実現できます。


add_filter( 'login_redirect'、 'redirect_user_on_login');
function redirect_user_on_login($ redirect_to){
home_url();を返します。
}

これを追加するとすぐに、管理者として、ホームページではなくWPダッシュボードに直接移動したいことがすぐにわかります。 問題ありません–管理者のみが機能するようにフックを修正するだけです。


add_filter( 'login_redirect'、 'redirect_user_on_login'、10、3);
function redirect_user_on_login($ redirect_to、$ request、$ user){
//ユーザーが管理者でない限り、ログインURLを変更します
if(isset($ user->ロール)&& is_array($ user->ロール)){
if(in_array( 'administrator'、$ user-> roles)){
$ redirect_toを返します; //管理者をデフォルトにリダイレクトします(管理領域)
}
}

$ redirect_toを返します;
}

$ priority$ argumentsが機能していることに注意してください

ユーザーのレベルを確認するには、フックの3番目の引数にアクセスする必要があるため、3つの引数を表示する必要があります。 値3を渡します。

10の$プライオリティは、もちろん、デフォルトと同じですが、上記の必要なことを$引数の値に到達するために指定されています

独自のフックを作成する

カスタムフックを作成する力はあなたの手の中にあります! WPが提供する関数は次のようになります。

do_action($ hook_name、$ arg_1、$ arg_2…$ arg_n);

apply_filters($ hook_name、$ arg_1、$ arg_2…$ arg_n);

繰り返しますが、それらは似たようなものです。 どちらの関数も名前を受け入れます–ここでフックに名前を付けます。 以下のすべての引数は、そのフックに追加する関数で使用できるようになる同じ引数です。 apply_filters()には、少なくとも1つの追加の引数(フィルター処理される引数)が必要ですが、他のすべての引数はオプションです。

たとえば、開始bodyタグの直前に分析スクリプトを挿入たいが、 header.phpを混乱に変えたくない場合


<?php do_action( 'before_body_tag'); ?;>
</ head>
<ボディ>

次に、必要な数のスクリプトを追加できます。


add_action( 'before_body_tag'、 'add_analytics_custom');
関数add_analytics_custom(){
// <script>タグと分析コードはここにあります
}

apply_filters()の動作は少し異なります。 上で説明したように、フィルターは値を変更するために使用されます。 フィルタは値を返すため、 apply_filters()呼び出しを変数に割り当てます


<?php $ text = apply_filters( 'call_to_action_text'、 'About us'); ?>
<a href =” <?php echo get_permalink( 'about'); ?>” class =” button cta”>
<?php echo $ text; ?>
</a>

//または、apply_filters()の結果を直接エコーすることもできます
<a href =” <?php echo get_permalink( 'about'); ?>” class =” button cta”>
<?php echo apply_filters( 'call_to_action_text'、 'About us'); ?>
</a>

次に、必要に応じてフィルター処理された変数を変更できます。


add_filter( 'call_to_action_text'、 'change_call_to_action_text');
function change_call_to_action_text($ text){
if(is_front_page()){
$ text = 'もっと発見する';
}

$ textを返します。
}

欠点

完璧なシステムはなく、フックも例外ではありません。 コアフックに関しては、通常、与えられたものを使用する必要があります。 非常にまれに、フックが最も便利な場所にない状況に遭遇することがあります。 これが起こったときにできることはあまりないので、創造的な解決策を見つける機会と見なしてください!

また、フックはWPディレクトリ構造内のどこにでも存在する可能性があるため、特定のロジックが発生している場所を見つけるのが難しい場合があります。 これは、関数フックを独自のファイルに分割することで相殺できます。

さらなるアドバイス

  • フックの関数を作成するときは、名前が一意であることを確認してください。一意でない場合、競合が発生します。 カスタムフックとフィルターの名前についても同じことが言えます。
  • フックを使用して、テンプレートを整理します。 テンプレート全体に挿入されたいくつかの一般的なdo_action()フックは、ロジックをマークアップから遠ざけるのに役立ちます(ほとんどの場合は良い考えです)。
  • 新しいプラグインをインストールするときは、プラグインが提供するフックを確認し、それらをどのように利用できるかを考えてください。 これは、プラグインがあなたが望むことを完全に実行しないという避けられない時代に特に役立ちます。
  • アクションまたはフィルターを追加するときに、関数名を関数自体に置き換えることができます。 これは、アクションとフィルターを自己完結型に保つのに役立ちます。 この方法で追加された関数は、 remove_action()またはremove_filter()を使用して削除できないため、注意してください。

add_action( 'where_to_do_the_thing'、function(){
echo '事は終わりました。';
}、10、1);
  • did_action()has_action()など、利用可能な他のフック関連関数を確認してください それらを知っているだけでいつ役立つかはわかりません。

概要

フックの使用は習慣の問題です。 WPプロジェクトに取り組むときはいつでも、2つの簡単な質問を自問してみてください。

  1. 「これを簡単にするフックはありますか?」
  2. 「将来の私にとってこれを簡単にするフックを追加できますか?」

この姿勢でWP開発に取り組むと、多くの扉が開かれます。

このガイドの例は、氷山の一角です。 プラグインとテーマの膨大なライブラリは言うまでもなく、WPコアだけでも何百ものフックがあります。 コアWPフックの完全なリストについては、WPアクションリファレンスフィルターリファレンスをご覧ください。


Web開発についてサポートが必要な場合は、遠慮なくお問い合わせください。