Ich versuche, den Eingabewert eines Shortcodes in einer Funktion abzurufen, die von einem Filter verwendet wird, aber es scheint keinen Erfolg zu geben. Folgendes habe ich getan:
function my_shortcode_function($atts){
$value = $atts['id'];
function filter_value(){
echo $value;
}
add_filter('posts_where','filter_value');
}
add_shortcode('my-shortcode','my_shortcode_function');
Jetzt weiß ich, dass die Verwendung von $value
inside filter_value()
aufgrund variabler Bereiche nicht funktioniert, aber selbst die Verwendung $GLOBALS['value']
funktioniert nicht.
Ich habe sogar versucht, $value = $atts['id']
innerhalb der zu verwenden, filter_value();
aber auch keinen Erfolg.
Wie kann ich meinen Shortcode wie verwenden [my-shortcode id='123']
und den 123-Wert an den Filter übergeben?
Vielen Dank.
$GLOBALS['value'] = some value
und dann aufrufe$GLOBALS['value']
, funktioniert es, aber wenn ich den Wert direkt als$value = some value
und dann mit$GLOBALS['value']
aufrufe, funktioniert es nicht, während es gemäß PHP-Handbuch funktionieren sollte.$value
den globalen Bereich mit festlegen ,global $value;
bevor Sie ihn mit einem Wert initialisieren. ZBglobal $value; $value = $a['id'];
Dann können Sie im Filter tun.global $value; echo $value;
Hilft das?$GLOBALS['value'];
?global
Schlüsselwort benötigt. In unseren Beispielen haben wir im Rahmen der Funktionen gearbeitet, daher ist dasglobal
Schlüsselwort erforderlich.Hier sind einige Problemumgehungen:
Ansatz Nr. 1
Sie können die Definition des Shortcodes und den
posts_where
Rückruf des Filters in eine Klasse einschließen, um einen bestimmten Wert zwischen den Klassenmethoden zu übergeben, z. B. als private Variable.Ansatz Nr. 2
Ein anderer Ansatz wäre, den Wert als Eingabe an
WP_Query
den Rückruf Ihres Shortcodes zu übergeben:und dann können Sie in Ihrem posts_where-Filter darauf zugreifen:
Ansatz Nr. 3
... oder Sie können das Beispiel auch von @the_dramatist anpassen , um den Rückruf anschließend zu entfernen, indem Sie die anonyme Funktion einer Variablen zuweisen:
Überprüfen Sie beispielsweise in den PHP-Dokumenten, wie Sie einer Variablen eine anonyme Funktion mit dem Schlüsselwort use zuweisen.
ps: Ich glaube, ich habe zuerst von @gmazzap etwas über diesen Trick der Variablenzuweisung gelernt, um das Entfernen des Rückrufs eines anonymen Filters zu vereinfachen.
Ich hoffe es hilft!
quelle
WP_Query
wie eine bestimmte Instanz und den Zugriff darauf durch verschiedene Filter zum Zielposts_where
,pre_get_posts
undposts_clauses
. Das machen wir in Ansatz 2.Sie können das
use
Schlüsselwort von PHP verwenden . Mit Hilfe diesesuse
Schlüsselworts können Sie also Variablen in eine Funktion einfügen. Außerdem können Sie eine anonyme Funktion schreiben, um den Code zu reduzieren. Das Ganze wird alsoIch hoffe, das hilft.
quelle
Warum nicht den $ -Wert als Parameter übergeben?
Dokumentation
quelle