WordPress. Базовые понятия для плагинов

Хуки

Пользователь отправляет какой-то HTTP запрос и интерпретатор PHP запускает нужные WordPress файлы, начиная с ядра, одним из файлов ядра является хранилище для хуков — WP_Hook класс. Затем PHP интерпретатор выполняет код строка за строкой и когда находит функции для добавления колбэков на хуки записывает их в хранилище. Очень важно, что колбэки не запускаются, а записываются в хранилище. Затем, интерпретатор находит функцию для запуска хука, смотрит в хранилище и запускает добавленные колбэк фукнции одна за одной по очереди.

Этот механизм даёт вам возможность изменить поведение ядра, любого другого плагина, или темы.

Хуки бывают двух типов actions и filter.

В двух словах, действия запускают какой-нибудь код, а фильтры — изменяют переменные. Давайте рассмотрим пару примеров.

пример хука-события с передачей параметра:

// создадим функции для событий
function echo_1( $data ){
	echo $data[0] .' '. $data[1] .'!';
}

// привяжем функции к хуку
add_action( 'my_hook', 'echo_1' );

// создаем/используем/запускаем хук
do_action( 'my_hook', [ 'Привет', ' мир' ] ); //> выведет "Привет мир!"

экшены

actions – это любая функция обработчик повешенная на событие.

Actions в WordPress относится к определенному действию, которое должно произойти в определенное время. С помощью действий вы можете добавить или изменить функциональность вашего плагина. Функции, которые связаны с действием, будут выполнены после его запуска.

Пример действия в WordPress – save_post. Действия определяются функцией do_action. Для них требуется параметр $tag (имя действия) и в некоторых случаях $args (дополнительные аргументы, расширяющие то, что делает действие).

Ядро WordPress уже содержит десятки предопределенных действий. Однако вы также можете создать свои собственные.

фильтры

Фильтр, так же как и экшен вешается на событие, но отличается тем, что предназначается для изменения или фильтрации переданных данных. То есть он обязательно принимает данные и обязан так же какие то данные вернуть.

Фильтры WordPress – это хуки, которые принимают одну переменную или серию переменных, а затем отправляют их обратно после того, как они были изменены. Вкратце, фильтры позволяют вам изменять контент, отображаемый для пользователей.

Фильтры в WordPress создаются с помощью функции apply_filters и определяются внутри функции. Для них требуются аргументы $tag (имя фильтра) и $value (отфильтрованное значение или переменная) с возможностью использования $var для дополнительных значений функции.

Вы можете создать свой собственный фильтр с помощью хука apply_filters. Затем для его выполнения вы можете использовать функцию add_filter.

шорткоды

Шорткод (шоткод, shortcode, короткий код) в WordPress — это конструкция в тексте, которая будет обработана и заменена на указанный код/текст. Обрабатывается шорткод специальной PHP функцией, указанной при регистрации шорткода.

Для создания шорткода используется функция add_shortcode(). Она принимает два параметра: имя шорткода и название PHP функции, которая будет обрабатывать шорткод.

Пример регистрации шорткода с аттрибутами:

add_shortcode( 'foobar', 'foobar_shortcode' );
function foobar_shortcode( $atts ) {

	$atts = shortcode_atts( [
		'name' => 'Noname',
		'age'  => 18,
	], $atts );

	return "Меня зовут {$atts['name']} мне {$atts['age']} лет";
}

виджеты

В WordPress виджеты — это фрагменты контента, которые находятся вне потока страницы или контента публикации.

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

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

В WordPress присутствуют мощные инструменты, позволяющие гибко управлять виджетами (добавлять на сайт, удалять, изменять их расположение). Для этого существует отдельный админ-раздел — Внешний вид -> Виджеты.

Пример создания виджета выводящего название и описание сайта. Для его создания нужно добавить в файл functions следующий код:

/* Виджет WPSchool Widget */
class wpschool_example_widget extends WP_Widget {

    // Установка идентификатора, заголовка, имени класса и описания для виджета.
    public function __construct() {
        $widget_options = array(
            'classname' => 'wpschool_widget',
            'description' => 'Это наш первый виджет',
        );
        parent::__construct( 'wpschool_widget', 'WPSchool Widget', $widget_options );
    }

    // Вывод виджета в области виджетов на сайте.
    public function widget( $args, $instance ) {
        $title = apply_filters( 'widget_title', $instance[ 'title' ] );
        $blog_title = get_bloginfo( 'name' );
        $tagline = get_bloginfo( 'description' );

        echo $args['before_widget'] . $args['before_title'] . $title . $args['after_title']; ?>
        <p><strong>Site Name:</strong> <?php echo $blog_title ?></p>
        <p><strong>Tagline:</strong> <?php echo $tagline ?></p>
        <?php echo $args['after_widget'];
    }

    // Параметры виджета, отображаемые в области администрирования WordPress.
    public function form( $instance ) {
        $title = ! empty( $instance['title'] ) ? $instance['title'] : ''; ?>
        <p>
        <label for="<?php echo $this->get_field_id( 'title' ); ?>">Title:</label>
        <input type="text" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $title ); ?>" />
        </p><?php
    }

    // Обновление настроек виджета в админ-панели.
    public function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance[ 'title' ] = strip_tags( $new_instance[ 'title' ] );
        return $instance;
    }

}

// Регистрация и активация виджета.
function wpschool_register_widget() {
    register_widget( 'wpschool_example_widget' );
}
add_action( 'widgets_init', 'wpschool_register_widget' );

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *