do_actionとadd_actionの違い


20

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

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

既に利用可能なフック(wp_head、wp_footer、.. etc)のような独自のフックを作成するために使用されると思います。

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

誰も私を助けることができますか?

質問の投稿後に編集

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');

コールバックを登録したdo_action('custom'); 後に電話をかけるとどうなりますか?そして、jQueryがロードされていることを確認してください。
FUXIA

私は、バックエンドやフロントエンドのいずれかの警告メッセージを取得していない

jQueryがロードされます。私は同じ機能をフックするときにwp_head、それをして正常に動作していないがcustom

サン、元の質問にはtoschoが回答したと思うので、これを解決済みとしてマークする必要があります。編集した#3と#4は、新しい質問に属します。
ブラソフィロ

回答:


13

do_action( 'unique_name' )独自のアクションを作成するために使用します。

これを使用してプラグインのAPIを提供し、他のプラグインがカスタムアクションのコールバックを登録できるようにします。例:プラグインでdo_actionを呼び出す必要がありますか?

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

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

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


私がこれを得た助けをありがとう、主にAPIの目的のためです。サンプルを試してみましたが、うまくいきませんでしたが、問題はありますか?@toscho私のEDITを確認

これを継承のような別のケースとして言うことはできますか?この方法で行っているクラスを拡張およびオーバーライドすることの代わりに。これは正しいです?

@sun Hm、はい、しかし、両方のアプローチ組み合わせることができます。それらは相互に排他的ではありません。
FUXIA

1

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

プラグインコードは前に実行されます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') 後に電話をかけるとどうなるかを尋ねた理由です。バックエンドとフロントエンドに関するあなたの答えはあいまいです。次のコードの最後の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.

0

do_actionアクションフックを登録し、while add_action:登録済みのフックにコールバック関数追加します

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

  1. あなたは追加されますアクションフックをあなたのテンプレートファイルにindex.php経由<?php add_action('bp_sidebar_left'); ?>
  2. これで、functions.phpファイル内でコールバック関数をそのフックに追加して、必要なものを印刷できます。

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


-1

以下のように使用する必要があります:

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

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect

それは私のために働いています
-user112289
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.