サーチ…


構文

  • add_action(タグ、function_to_call、priority、num_of_args);
  • add_filter(tag、function_to_call、priority、num_of_args);

パラメーター

パラメータ説明
$タグ (string)(必須)$関数がフックされるアクションの名前。
$関数 (呼び出し可能)(必須)関数名または匿名関数を含む文字列が必要です。クラス内での関数の追加の例を参照してください。
$ priority (int)default = 10.フック/フィルタに付加された関数は、割り当てられた優先度で実行されます。あなたは、他のアクションの前にコードを扱い、優先度= 1を設定したり、他のすべての関数を優先度= 100にしたりしたい場合があります。すべてのPHP関数と同様に、変数に値を渡さずに関数を使用できますデフォルト値が設定されていますが、返されるパラメータの数を変更する場合は、!
$パラメータ (int)default = 1.接続された関数に返されるパラメータの数。返されるパラメータは、フックが作成された場所の番号によって異なります。詳細については、 apply_filters()およびdo_action()を参照してください。

備考

ワードプレスフック

WordPressで作業を開始するときに開発者を混乱させるものは、 apply_filters()add_action()です。コードでこれらのプラグイン/テーマを利用していることがよくありますが、そのコンセプトを理解していないと、それらを扱うのが難しくなります。

簡単に(非常に簡単に、プロセスの詳細なWordPressロードフローチャートを参照)、WordPressは次のようにロードされます。

  1. wp-load.php - 関数など
  2. mu-plugins - mu-pluginsフォルダにあるファイル - キャッシュされたオブジェクトを扱うためによく使用される
  3. プラグイン - 特定の順序はなく、インストールされ、アクティブ化されたプラグインがロードされます
  4. アクティブな子テーマ/親テーマ
  5. init - 残りのデータ
  6. テンプレート

開発者で機能ファイルを操作している場合、両方のファイルが処理中のファイルより前に読み込まれていることがわかります。つまり、後で実行される、またはまだ定義されていないプロセス(関数を上書きすることはできません)または変数を変更することはできません。また、テーマ開発者は、コードにフックを配置して、プラグインがフックするか、プラグインが他のプラグインが変数を上書きできるようにすることができます。今これはこれまでのところ混乱するかもしれませんが、そこにぶら下がっています。

add_filter()add_action()を理解するために、最初にフックがどのように作成されるかを調べる必要があります。

$arga= 'hello';
do_action('im_a_hook', $arga );

上記のWordPressに遭遇すると、フックim_a_hook接続されている関数が呼び出されます(プロセスの情報については$wp_filterを参照してください)。あなたの接続された関数で$argaは、接続された関数が利用できるようになります。

add_action('im_a_hook', 'attached_function');

function attached_function($arga){
     echo $arga;
}

これにより、ロードプロセスの特定の時点で変数を変更する強力な新しい機会が開かれます。以前テンプレートはプラグイン/テーマの後に読み込まれていたことを覚えていますか? 1つの一般的なプラグインは、プロセスの後半に画面を作成するWooCommerceですが、 do_action例がプラグインでどのように見つかるかを文書化するつもりはありません。

do_action( 'woocommerce_after_add_to_cart_button' );

ここでは、変数を返さないフックを作成しましたが、それでも面白いことがあります:

add_action( 'woocommerce_after_add_to_cart_button', 'special_offer');

function special_offer(){
    echo '<h1>Special Offer!</h1>;
}

上記のadd_actionは、WooCommerce画面を作成するときのdo_action('woocommerce_after_add_to_cart_button')が配置されている特別提供の見出しをechoします。そこで、このフックを使ってhtmlを挿入することができます。他の用途には、別の画面にリダイレクトするなどがあります。

また、複数の変数を関数に渡すこともできます。あなたのテーマの機能でこれを試してください。利用可能な3つのパラメータを使用したいので、3に設定する最後のパラメータに注意してください。これを2に変更すると、2つしか返されず、未定義のエラーが発生します。

add_action('custom_hook', 'attached_function', 10, 3);

function attached_function($a,$b,$c){
    
    var_dump($a);
    var_dump($b);
    var_dump($c);
    
}
    

$arga = 1;
$argb = 2;
$argc = 3;

do_action('custom_hook', $arga, $argb, $argc);
exit;

フィルターと呼ばれる別のWPフックタイプがあります。フィルタはその使用法のアクションとは異なり、アクションは変数のみを受け取ることができます。明らかにこれらの変数はfunctionスコープ内にあります(google以外のPHPスコープは知っておく必要があります)。フィルタは返されたデータを返すので、変数の変更に使用できます。

$filter_me= apply_filters('im_a_filter', $variable_to_filter);

上記を見ると、返されるデータは変数に格納されている値になるので、 $filter_meの値を変更することができます。たとえば、この例では、 $variable_to_filter$filter_meに変更してい$variable_to_filter

add_filter('im_a_filter', 'attached_function', 100);

function attached_function($filter_me){
    
    $filter_me= 'ray';
    
    return $filter_me;
    
}


$filter_me = 'bob';
$filter_me= apply_filters('im_a_filter', $filter_me);

$filter_me変数に'bob 'ではなく'ray'が含まれるようになりました.100の優先度を設定していますので、使用後に値を変更する人はいません(同じフックで複数のフィルタを実行できます)。 apply_filters()が存在する場合、 apply_filters()プロセスで使用される変数を変更できるようになりました。

複数のパラメータを渡すこともできますが、その値を変更することはできます。また、値を返す必要があります。そうでなければ、変数には何も含まれません。変数に値/配列/オブジェクトを代入するためにPHPを使う方法を理解しているなら、これはあなたには明らかです。

add_filter('im_a_filter', 'attached_function', 100, 3);

function attached_function($filter_me, $arga, $argb){
    
    $filter_me= 'ray'.$arga.$argb;

    $arga= 'you fool';
    
    return $filter_me;
    
}

$filter_me = 'bob';

$arga = ' middlename';
$argb = ' surname';

$filter_me= apply_filters('im_a_filter', $filter_me, $arga, $argb);

$filter_me変数に'ray middlename surname'が含まれるようになりました 。しかし、 $argaどうですか?これにはまだ'middlename'が含まれています。関数内で$arga'あなたがだます 'に変更すると、範囲外の定義された値には何の効果もありません(方法、Googleグローバルなどがあります)

add_action($ hook_name、$ function、$ priority、$ parameters)

add_filter($フック名、$関数、$プライオリティ、$パラメータ);

add_action - init

add_action('init', 'process_post');

function process_post(){
   if($_POST)
     var_dump($_POST);
}

add_action - init - 無名関数

add_action('init' , function(){
    echo 'i did something';
});

add_action - init - クラスオブジェクト内

 class sample{

     public function __construct(){
         add_action('init', array($this, 'samp') );
     }


     public function samp(){ // must be public!!
         echo 'i did something';
     }
 }

 new sample();   

add_action - 静的クラス内のinit

 class sample{

     public static function add_action_func(){
         //note __CLASS__ will also include any namespacing
         add_action('init', array(__CLASS__, 'samp') );
     }

     public static function samp(){
         echo 'i did something';
     }
     
 }

 sample::add_action_func();


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow