web-dev-qa-db-ja.com

Do_actionとadd_actionの違い

この質問は間違っているかもしれません、私はそれについて確信がありません。私はこれについてはっきりしていないので。

add_actionは、関数を指定された関数にフックするために使用されています。例えばadd_action('wp_head'.'myfunc');myfuncのコードはwp_head()の中で実行されます。これは明らかですが、do_actionでそれが何をするのか疑問です。

私はそれがすでに利用可能なフック(wp_head、wp_footerなど)のような私たち自身のフックを作成するのに使われていると思います。

私はインターネットで違いを試しましたが、すべてがadd_actionとadd_filterの違いを指しています。最初にこれを明確にしたいのですが、そこに移動します。

誰かが私を手伝ってくれる?

_編集_ 質問POSTの後

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

私はこれをプラグインで試しましたが、警告メッセージが出ませんでした。

しかし、私はwp_headと同じ機能をフックすると、それはうまく働いています

/******************working****************/
add_action('wp_head','custom_register');
20
sun

独自のアクションを作成するにはdo_action( 'unique_name' )を使います。

あなたのプラグインの APIを提供するためにそれを使うことができます それで他のプラグインはあなたのカスタムアクションのためのコールバックを登録することができます。例: 自分のプラグインでdo_actionを呼び出す必要がありますか?

ただし、テーマでカスタムアクション(またはフィルタ)を使用することもできます。例: カスタムセクションをWordPressテーマに実装するためのベストプラクティス方法

そして、プラグインとテーマを一緒に機能させるために両方を組み合わせることができます。例: テーマで利用可能なプラグインのメソッドを作るには?

要約:add_action( 'foo' )はコールバックを登録し、do_action( 'foo' )はその登録されたコールバックを実行します。

11
fuxia

これは私の推測です、それであなたがよりよく知っているならば、私が私の推測を更新することができるようにコメントをしてください。

あなたのプラグインコードはwp_head()の前に実行されます(それが追加されたアクションを呼び出すと仮定できます)。あなたがadd_action('wp_head','custom_register')したとき、あなたはPHPに(将来)do_action('wp_head')が呼ばれた時に、custom_register()を呼ぶように伝えています。 add_action('custom','custom_register')の呼び出しにも同じことが言えますが、コードからわかるように、do_action('custom')の呼び出しは既に行われており、呼び出された時点では(まだ)アクションは追加されていません。これが、Toschoがあなたがコールバックを登録したdo_action('custom')afterを呼び出すとどうなるか尋ねた理由です。バックエンドとフロントエンドに関するあなたの答えはあいまいです。次のコードの最後の2行を入れ替えれば、うまくいくと思います。

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.
1
Dave Scotese

do_action アクションフック を登録します。一方、add_action は登録されたフックにコールバック関数 を追加します。

テンプレートのサイドバーの前に何か印刷したいとします。

  1. <?php add_action('bp_sidebar_left'); ?>を介してテンプレートファイルindex.php action hook を追加します。
  2. 今すぐあなたのfunctions.phpファイルにあなたが欲しいものを印刷するためにそのフックにコールバック関数を追加することができます。

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

0
Aamer Shahzad