Почему используют add_action для шорткодов?

13 мар. 2013 г., 10:22:34
Просмотры: 17.3K
Голосов: 8

Я хочу создать шорткоды, но в некоторых руководствах предлагают использовать add_action:

add_action( 'init', 'register_shortcodes');

Но я читал другой туториал, где автор не использовал это, а просто добавлял код в functions.php:

add_shortcode( 'recent-posts', 'recent_posts_function' );

Какой метод лучше и зачем использовать add_action?

1
Комментарии

Обертывание вызовов add_shortcode в функцию и вызов этой функции через хук дает вам больше контроля над тем, когда добавляются шорткоды. Например, вы можете захотеть добавить эти шорткоды при активации определенного плагина, но не в других случаях.

admcfajn admcfajn
20 февр. 2019 г. 08:26:07
Все ответы на вопрос 3
1

Если вы посмотрите на страницу Кодекса о функции add_shortcode(), вы не увидите ничего о необходимости использования add_action() перед тем, как можно будет использовать add_shortcode().

Таким образом, вы можете просто поместить ваш add_shortcode() прямо в файл functions.php. Я тоже так делаю.

Ознакомьтесь со статьёй — Шорткоды WordPress: Полное руководство об использовании шорткодов и лучших практиках.

13 мар. 2013 г. 10:32:21
Комментарии

Вы фактически сослались на статью, в которой говорится, что следует оборачивать в действие.

raam86 raam86
1 сент. 2013 г. 16:39:47
0

Иногда необходимо использовать действие 'init'. Например, прямо сейчас я редактирую тему, которая сильно зависит от виджетов и панели настройки. Я попытался добавить пользовательский шорткод без действий и получал ошибки при сохранении контента в панели Customize. Действие гарантирует правильный порядок выполнения функций. Оно как бы говорит: "Эй, шорткоды! Сначала я загружу самые важные функции, а потом уже вы!"

16 мар. 2017 г. 10:43:45
1

Не повторяя того, что уже было рассмотрено в ответах выше; это просто подход, основанный на лучших практиках. Я часто использую это в разработке плагинов, где мне нужно использовать отдельные классы, как в wppb.me стартовом шаблоне плагина.

Логично регистрировать все хуки админки в загрузчике. В случае с шорткодом, вы можете добавить хук add_action для шорткода в метод загрузки хуков:

/**
  * Регистрация всех хуков, связанных с функциональностью админки плагина
  */

private function define_admin_hooks() {

    $plugin_admin = new instance( $this->get_plugin_name(), $this->get_version() );

    $this->loader->add_action( 'init', $plugin_admin, 'register_shortcodes');
}

Основное преимущество этого подхода - простота поддержки кода благодаря его модульности. Вы можете добавить несколько других хуков в тот же метод, что упрощает отслеживание и внесение изменений, особенно для крупного плагина.

Это означает, что в классе, где вы хотите использовать add_shortcode, вам не нужно запускать хук действия в конструкторе, теперь вы можете использовать его в пользовательском методе:

public function register_shortcodes(){

    add_shortcode('recent-posts', array($this, 'recent_posts_function'));

}
19 февр. 2019 г. 23:58:17
Комментарии

Вы сэкономили мне время. Я не передавал второй аргумент с экземпляром класса и потратил 2 часа на отладку. :|

Tan-007 Tan-007
20 сент. 2019 г. 03:59:31