Unterschied zwischen do_action und add_action


20

Diese Frage könnte falsch sein, da bin ich mir nicht sicher. Weil mir das nicht klar ist.

Ich weiß, dass add_actiones verwendet wird, um unsere Funktion mit der angegebenen Funktion zu verknüpfen. Zum Beispiel wird add_action('wp_head'.'myfunc');jetzt jeder Code in myfuncder ausgeführt wp_head(). Das ist klar, aber ich habe Zweifel, do_actionwas es tut?

Ich denke, es wird verwendet, um unseren eigenen Hook zu erstellen, wie bereits verfügbare Hooks (wp_head, wp_footer usw.). Wenn ich richtig bin, kann mir jemand eine einfache verständliche Antwort mit einem einfachen Beispiel zeigen.

Ich habe den Unterschied im Internet ausprobiert, aber alle weisen auf den Unterschied zwischen add_action und add_filter hin. Ich möchte nicht dorthin gehen, weil ich das zuerst klären möchte und dann dorthin ziehe.

Kann mir jemand helfen?

BEARBEITEN nach Frage POST

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

}
do_action('custom');

add_action('custom','custom_register');

Ich habe es im Plugin versucht, aber die Warnmeldung wurde nicht angezeigt.

Aber wenn ich die gleiche Funktion mit wp_headeinhake, dann funktioniert es gut

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

Was passiert, wenn Sie anrufen, do_action('custom'); nachdem Sie den Rückruf registriert haben? Und stellen Sie sicher, dass jQuery geladen ist.
Fuxia

Ich bekomme nicht die Warnmeldung entweder auf der Rückseite oder auf der Vorderseite
Sonne

jQuery werden geladen. Wenn ich mit der gleichen Funktion Hake wp_heades funktioniert gut , aber nicht mit dercustom
Sonne

So, ich glaube deine ursprüngliche Frage wurde von toscho beantwortet und du solltest dies als gelöst markieren. Die Änderungen 3 und 4, die Sie vorgenommen haben, gehören zu einer neuen Frage .
Brasofilo

Antworten:


13

Verwenden do_action( 'unique_name' )Sie diese Option , um eigene Aktionen zu erstellen.

Sie können dies verwenden, um eine API für Ihr Plugin anzubieten , sodass andere Plugins Rückrufe für Ihre benutzerdefinierte Aktion registrieren können. Beispiel: Muss ich in meinem Plugin do_action aufrufen?

Sie können jedoch auch benutzerdefinierte Aktionen (oder Filter) in einem Thema verwenden. Beispiel: Best Practice-Methode zum Implementieren benutzerdefinierter Abschnitte in ein WordPress-Design

Und Sie können beide kombinieren, um ein Plugin und ein Thema zu erstellen, die zusammenarbeiten. Beispiel: Wie kann man eine Methode aus einem Plugin in einem Theme verfügbar machen?

Zusammenfassung: add_action( 'foo' )Registriert einen Rückruf und do_action( 'foo' )führt diesen registrierten Rückruf aus.


Vielen Dank für die Hilfe, die ich bekommen habe, ist hauptsächlich für API-Zwecke. Ich habe eine Probe ausprobiert, aber es hat nicht geklappt. Können Sie dort ein Problem finden? Check my EDIT @toscho
sun

Können wir das als einen anderen Fall wie Vererbung bezeichnen? Statt die Klasse zu erweitern und zu überschreiben, gehen wir diesen Weg. Ist das richtig?
Sonne

@sun Hm, ja, aber Sie können beide Ansätze kombinieren , sie schließen sich nicht gegenseitig aus.
Fuxia

1

Dies ist meine Vermutung. Wenn Sie es also besser wissen, machen Sie bitte einen Kommentar, damit ich meine Vermutung aktualisieren kann.

Ihr Plugin-Code wird zuvor ausgeführt wp_head()(von dem wir annehmen können, dass er die hinzugefügten Aktionen aufruft). Wenn Sie add_action('wp_head','custom_register')angeben, dass PHP (in der Zukunft) do_action('wp_head')aufgerufen werden soll, müssen Sie dies ebenfalls tun custom_register(). Dasselbe gilt für Ihren Aufruf von, add_action('custom','custom_register')aber wie Sie in Ihrem Code sehen, wurde der Aufruf von do_action('custom')bereits ausgeführt, und als er aufgerufen wurde, wurde (noch) keine Aktion hinzugefügt. Deshalb hat Toscho gefragt, was passiert, wenn Sie anrufen, do_action('custom') nachdem Sie den Rückruf registriert haben. Ihre Antwort zu Backend und Frontend ist nicht eindeutig. Wenn Sie die letzten beiden Zeilen in folgendem Code vertauschen, wird dies meiner Meinung nach funktionieren:

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: Registriert einen Aktions-Hook, während add_action: dem registrierten Hook eine Rückruffunktion hinzufügt .

Beispiel

Stellen Sie sich vor, Sie möchten etwas vor der Seitenleiste in Ihrer Vorlage drucken.

  1. Sie fügen über einen Aktions-Hook in Ihre Vorlagendatei index.phpein <?php add_action('bp_sidebar_left'); ?>.
  2. Jetzt können Sie in Ihrer functions.phpDatei diesem Hook eine Rückruffunktion hinzufügen, um etwas zu drucken, das Sie möchten.

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


-1

Sie müssen wie folgt verwenden:

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

Es funktioniert für mich
user112289
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.