W klasie wtyczek chcę podać proste pola dla danych publicznych: e-mail, numer telefonu, Twitter itp. Listę można rozszerzyć.
Szczegółowe informacje można znaleźć we wtyczce Publiczne dane kontaktowe na GitHub.
Aby uprościć użytkowanie, chcę również oferować łatwe do pisania skróty:
[public_email]
[public_phone]
[public_something]
Jedyną różnicą jest druga część. Nie chcę dalszych argumentów za skrótami, ponieważ są one podatne na błędy. Dlatego rejestruję jedną procedurę obsługi krótkich kodów dla wszystkich pól w mojej klasie wtyczek:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Teraz shortcode_handler()
musi wiedzieć, który skrót został wywołany. Moje pytanie brzmi: jak to zrobić?
Moje obecne obejście to inna funkcja:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
To… działa dla the_content()
. Ale nie jest ani elegancki, ani solidny.
Przeczytałem wp-includes/shortcodes.php
, ale nie widzę teraz, jak to zrobić lepiej.
Odpowiedzi:
Jest to niesprawdzone , ale funkcja wywołania zwrotnego jest wyposażona w tablicę argumentów,
$args
które dają (jeśli w ogóle) parametry dostarczone ze skrótem. Wpis zerowy czasami zawiera nazwę użytego krótkiego kodu (nppublic_email
.). Czasami mam na myśli ...(Zobacz Kodeks ). Do swoich celów, a następnie
$atts[0]
będzie zawierać albopublic_email
,public_phone
etc.źródło
$args
drugi,$content
a ostatni krótki kod!$args
. Ale jeśli to Ci odpowiada ...: D.Opierając się na odpowiedzi Stephena Harrisa, sprawiłem, że mój program obsługi catch zaakceptował trzeci argument, którym jest nazwa shortcode:
Zobacz to w działaniu we wtyczce połączonej z moim pytaniem.
źródło