In einer Plugin-Klasse möchte ich einfache Felder für öffentliche Daten bereitstellen: E-Mail, Telefonnummer, Twitter usw. Die Liste kann erweitert werden.
Weitere Informationen finden Sie im Plugin Öffentliche Kontaktdaten auf GitHub.
Um die Verwendung einfach zu halten, möchte ich auch Shortcodes anbieten, die einfach einzugeben sind:
[public_email]
[public_phone]
[public_something]
Der einzige Unterschied ist der zweite Teil. Ich möchte keine weiteren Argumente für die Shortcodes, da diese fehleranfällig sind. Also registriere ich einen Shortcode-Handler für alle Felder in meiner Plugin-Klasse:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Jetzt shortcode_handler()
muss man wissen, welcher Shortcode aufgerufen wurde. Meine Frage ist: Wie mache ich das?
Meine aktuelle Problemumgehung ist eine weitere Funktion:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Das… funktioniert für the_content()
. Aber es ist weder elegant noch robust.
Ich habe gelesen wp-includes/shortcodes.php
, kann aber momentan nicht sehen, wie ich es besser machen kann.
Antworten:
Dies ist nicht getestet , aber die Rückruffunktion wird mit einer Reihe von Argumenten bereitgestellt,
$args
die (falls vorhanden) die mit dem Shortocode bereitgestellten Parameter angeben. Der nullte Eintrag enthält manchmal den Namen des verwendeten Shortcodes (zpublic_email
. B. ). Mit manchmal meine ich ...(Siehe den Kodex ). Für Ihre Zwecke dann
$atts[0]
entweder enthaltenpublic_email
,public_phone
usw.quelle
$args
, der zweite$content
und der letzte der Shortcode!$args
. Aber wenn das bei Ihnen funktioniert ...: D.Basierend auf der Antwort von Stephen Harris ließ ich meinen Catch All Handler ein drittes Argument akzeptieren, nämlich den Shortcode-Namen:
Sehen Sie es in Aktion in dem Plugin, das in meiner Frage verlinkt ist.
quelle