Benutzerdefinierte Themen Hooks / Filter – Übergabe von Argumenten

Ich bin verwirrt, wenn ich versuche, diese benutzerdefinierten Themen-Hooks zu implementieren. Ich versuche, meinen Kopf darum zu wickeln.

Ich dachte, ich verstehe das. aber jetzt nach dem Lesen des Codes für mehrere Stunden; es hat es schlimm gemacht.

Wie ändere ich das Argument, das im Folgenden übergeben wird?

functions.php

 function theme_content() { do_action('theme_content'); // Initialize my custom hook } function theme_content_alter($arg) { // Do processing if (!$arg) { echo '

default

'; } if ($arg == 'foo') { echo '
bar
'; } echo apply_filters('theme_content','theme_content_alter', $arg); } add_action('theme_content', 'theme_content_alter');

index.php

 theme_content($arg = 'foo'); 

Was ich versuche zu erreichen

Hooks überschreiben und kontextuelle Verarbeitung in einer function oder eine separate Datei von einer require verarbeiten können.

Ein Beispiel: Ich möchte, dass theme_content () auf keiner Startseite eine Seitenleiste hat, sondern auf einer Unterseite eine Seitenleiste usw. Dies könnte folgendermaßen ausgedrückt werden:

Ist das der richtige Weg, dies zu tun? Ich habe versucht, es in mein Thema zu schreiben und konnte nicht herausfinden, warum es nicht funktioniert. Meine Argumente werden in den Parametern nicht übergeben.

Was habe ich getan

Habe mehrere Threads auf dieser SE getestet und fand sie nicht sehr hilfreich für meinen Kontext:

  • Erklärung für die function apply_filters und ihre Variablen

  • get_template_part vs. Aktions-Hooks in Themen

  • Unterschied zwischen Filter und Action Hooks?

Solutions Collecting From Web of "Benutzerdefinierte Themen Hooks / Filter – Übergabe von Argumenten"

Wenn Sie möchten, dass der theme_content Hook mit Argumenten ausgeführt wird, die Sie an die theme_content() -function übergeben, müssen Sie theme_content() schreiben:

 function theme_content($args) { do_action('theme_content', $args); } 

Sehr gute Antwort von Rarst. Ich habe es gemacht hart falsche Art und Weise ohne die $args in der Hook-Initialisierungsfunktion und global $post in der Verarbeitungsfunktion aufgerufen, damit es funktioniert.

Ich wollte auch die Antwort von Rarst erweitern und erwähnen, dass statt die Werte zu wiederholen, sie der Variablen $arg zugewiesen werden sollten, sonst wird auch der Arg “foo” im Inhalt ausgegeben. Sie müssen den Hook-Namen auch nicht in apply_filters .

Hier ist dein Code aktualisiert (das wurde getestet und funktioniert)

 function theme_content( $arg ) { do_action('theme_content', $arg ); // Initialize my custom hook } function theme_content_alter( $arg ) { if( !$arg ) { $arg = '

default

'; } elseif ( $arg == 'foo' ) { $arg = '
bar
'; } echo apply_filters( 'theme_content_alter', $arg ); } add_action( 'theme_content', 'theme_content_alter' );