Где вызывать функцию add_shortcode в шаблоне плагина WordPress?

Вопрос или проблема

Я создаю новый плагин и решил использовать WordPress Plugin Boilerplate.

Однако я не уверен, где правильное место для вызова add_shortcode. Я застрял по двум причинам:

  1. add_shortcode обычно не имеет хука, поэтому я сомневаюсь, что вызову его через функции define_admin_hooks или define_public_hooks.
  2. Я не уверен, как указать функцию обратного вызова для 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 структура обычно выглядит следующим образом:

  1. Класс-лендер (например, class-plugin-loader.php) — здесь вы добавляете методы для регистрации хуков.
  2. Главный класс плагина (например, class-plugin.php) — здесь вы управляете логикой функционала вашего плагина и определяете поведение.
  3. Класс представления (например, 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 на фактические значения, которые вы хотите использовать в вашем плагине. Такой подход позволяет следовать принципам объектно-ориентированного программирования и сохраняет чистоту кода.

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

Оцените материал
Добавить комментарий

Капча загружается...