- Вопрос или проблема
- Ответ или решение
- Где вызывать функцию add_shortcode в WordPress Plugin Boilerplate?
- Шаг 1: Определение структуры
- Шаг 2: Добавление метода для регистрации шорткодов
- Шаг 3: Регистрация шорткодов
- Шаг 4: Определение шорткода в основном классе
- Шаг 5: Реализация функции обратного вызова шорткода
- Заключение
Вопрос или проблема
Я создаю новый плагин и решил использовать WordPress Plugin Boilerplate.
Однако я не уверен, где правильное место для вызова add_shortcode
. Я застрял по двум причинам:
add_shortcode
обычно не имеет хука, поэтому я сомневаюсь, что вызову его через функцииdefine_admin_hooks
илиdefine_public_hooks
.- Я не уверен, как указать функцию обратного вызова для
add_shortcode
, теперь когда все стало объектно-ориентированным.
Так где лучше всего вызвать add_shortcode
? Краткий пример/фрагмент будет очень полезен.
Добавьте приведенную ниже функцию в /includes/class-plugin-loader.php
:
public function add_shortcode( $tag, $component, $callback, $priority = 10, $accepted_args = 2 ) {
$this->shortcodes = $this->add( $this->shortcodes, $tag, $component, $callback, $priority, $accepted_args );
}
Затем вы можете определить свой шорткод в /includes/class-plugin.php
внутри этой функции:
/**
* Регистрация всех хуков, связанных с функциональностью, доступной для публики
* плагина.
*
* @since 1.0.0
* @access private
*/
private function define_public_hooks() {
$plugin_public = new Plugin_Public( $this->get_plugin_name(), $this->get_version() );
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
$this->loader->add_shortcode( 'YOUR-SHORTCODE-NAME', $plugin_public, 'YOUR_CALLBACK_FUNCTION' );
}
Наконец, добавьте свою функцию обратного вызова в /public/class-plugin-public.php
так:
public function YOUR_CALLBACK_FUNCTION( $atts ){
// сделайте свои вещи с шорткодом
}
Замените plugin
в именах файлов выше на имя вашего плагина.
Приведенный выше код в целом правильный, однако эти хуки должны быть зарегистрированы как add_shortcode, где находятся действия и фильтры. Вот полный код реализации.
Шаг: 1
в -> class-plugin-loader.php
Добавьте свойство $shortcode как защищенное
protected $shortcodes;
public function add_shortcode( $tag, $component, $callback, $priority = 10, $accepted_args = 2 ) {
$this->shortcodes = $this->add( $this->shortcodes, $tag, $component, $callback, $priority, $accepted_args );
}
Шаг 2: Теперь вам нужно зарегистрировать все ваши передаваемые шорткоды, где находятся действия и фильтры
в методе run после предыдущих фильтров и хуков действий для каждой функции поместите следующий код
if ( isset( $this->shortcodes ) ) {
foreach ( $this->shortcodes as $shortcode ) {
add_shortcode( $shortcode['hook'], array( $shortcode['component'], $shortcode['callback'] ) );
}
}
Ответ или решение
Где вызывать функцию add_shortcode в WordPress Plugin Boilerplate?
Создание плагина на основе WordPress Plugin Boilerplate — это популярный подход, который помогает разработчикам организовать структуру своего кода. Однако, при реализации функции add_shortcode
, важно правильно выбрать место для ее вызова, чтобы ваша шорткод логика работала корректно и эффективно.
Шаг 1: Определение структуры
Прежде всего, необходимо понимать, что функция add_shortcode
не требует вызова с использованием хуков, как это происходит с функциями для действий и фильтров. Вместо этого, рекомендуется вызывать add_shortcode
в методе, который отвечает за регистрацию всех шорткодов вашего плагина.
В WordPress Plugin Boilerplate структура обычно выглядит следующим образом:
- Класс-лендер (например,
class-plugin-loader.php
) — здесь вы добавляете методы для регистрации хуков. - Главный класс плагина (например,
class-plugin.php
) — здесь вы управляете логикой функционала вашего плагина и определяете поведение. - Класс представления (например,
class-plugin-public.php
) — здесь находится логика, связанная с отображением на фронте.
Шаг 2: Добавление метода для регистрации шорткодов
Вам нужно будет внести некоторые изменения в ваш класс-лендер. Здесь вам потребуется добавить защищенное свойство для хранения вашей шорткод информации и метод для регистрации шорткодов:
// В файле /includes/class-plugin-loader.php
protected $shortcodes;
public function add_shortcode( $tag, $component, $callback, $priority = 10, $accepted_args = 2 ) {
$this->shortcodes[] = [
'hook' => $tag,
'component' => $component,
'callback' => $callback,
'priority' => $priority,
'accepted_args' => $accepted_args,
];
}
Шаг 3: Регистрация шорткодов
Теперь, когда у вас есть метод для добавления шорткодов, следующим шагом будет их регистрация. Это нужно делать в методе run()
в вашем классе-лендере, чтобы убедиться, что все шорткоды будут зарегистрированы во время инициализации плагина.
// В файле /includes/class-plugin-loader.php
public function run() {
// Регистрация хуков (действий и фильтров)
if ( isset( $this->shortcodes ) ) {
foreach ( $this->shortcodes as $shortcode ) {
add_shortcode( $shortcode['hook'], [ $shortcode['component'], $shortcode['callback'] ] );
}
}
}
Шаг 4: Определение шорткода в основном классе
Для того чтобы добавить ваш шорткод, вам нужно определить его в классе вашего плагина, например, в методе define_public_hooks()
:
// В файле /includes/class-plugin.php
private function define_public_hooks() {
$plugin_public = new Plugin_Public( $this->get_plugin_name(), $this->get_version() );
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_styles' );
$this->loader->add_action( 'wp_enqueue_scripts', $plugin_public, 'enqueue_scripts' );
// Добавляем шорткод
$this->loader->add_shortcode( 'YOUR-SHORTCODE-NAME', $plugin_public, 'YOUR_CALLBACK_FUNCTION' );
}
Шаг 5: Реализация функции обратного вызова шорткода
Теперь определите функцию обратного вызова для вашего шорткода в классе представления:
// В файле /public/class-plugin-public.php
public function YOUR_CALLBACK_FUNCTION( $atts ) {
// Логика обработки шорткода
return 'Ваш вывод здесь';
}
Заключение
Используя описанные выше шаги, вы сможете корректно зарегистрировать ваш шорткод в плагине, построенном на WordPress Plugin Boilerplate. Удостоверьтесь, что вы заменили все упоминания YOUR-SHORTCODE-NAME
и YOUR_CALLBACK_FUNCTION
на фактические значения, которые вы хотите использовать в вашем плагине. Такой подход позволяет следовать принципам объектно-ориентированного программирования и сохраняет чистоту кода.
Эта структура обеспечивает простоту в дальнейшем расширении функциональности вашего плагина и дает четкую организацию, что крайне важно для любого разработчика.