В классе плагинов я хочу предоставить простые поля для общедоступных данных: электронная почта, номер телефона, Twitter и т. Д. Список можно расширить.
Смотрите плагин Public Contact Data на GitHub для деталей.
Для простоты использования я также хочу предложить короткие коды, которые легко набирать:
[public_email]
[public_phone]
[public_something]
Разница лишь во второй части. Я не хочу больше аргументов для шорткодов, потому что они подвержены ошибкам. Поэтому я зарегистрировал один обработчик шорткода для всех полей в моем классе плагинов:
foreach ( $this->fields as $key => $value )
{
add_shortcode( 'public_' . $key, array( $this, 'shortcode_handler' ) );
}
Теперь shortcode_handler()
нужно знать, какой шорткод был вызван. Мой вопрос: как мне это сделать?
Мой нынешний способ это еще одна функция:
protected function current_shortcode()
{
$backtrace = debug_backtrace( DEBUG_BACKTRACE_IGNORE_ARGS );
return $backtrace[3]['args'][0][2];
}
Это ... работает для the_content()
. Но это не элегантно и не надёжно.
Я прочитал wp-includes/shortcodes.php
, но я не вижу сейчас, как это сделать лучше.
Ответы:
Это не проверено , но функция обратного вызова снабжена массивом аргументов,
$args
которые дают (если таковые имеются) параметры, предоставляемые шорткодом. Нулевая запись иногда содержит название используемого шорткода (напримерpublic_email
). Иногда я имею в виду ...(См. Кодекс ). Для ваших целей тогда
$atts[0]
будет содержаться либоpublic_email
иpublic_phone
т.д.источник
$args
, второй$content
и последний шорткод!$args
. Но если это работает для вас ...: D.Основываясь на ответе Стивена Харриса, я заставил свой обработчик catch all принять третий аргумент, который является сокращенным именем:
Посмотрите это в действии в плагине, связанном в моем вопросе.
источник