WordPress. Создание плагина. Часть 2 из 2

23.05.2019

Теги: CMSWeb-разработкаWordPressПлагин

Итак, наш первый плагин уже работает, его можно активировать и деактивировать. При активации и деактивации выполняются некоторые действия, и плагин можно удалить. Давайте теперь с помощью хука вмешаемся в ход выполнения WordPress и выполним какое-нибудь действие — чтобы увидеть результат работы плагина.

Например, преобразуем первый символ каждого слова заголовка в верхний регистр:

<?php
/*
Plugin Name: Hello, world!
Plugin URI: https://tokmakov.msk.ru
Description: Простой плагин, в целях изучения WordPress.
Version: 1.0
Author: Евгений Токмаков
Author URI: https://tokmakov.msk.ru
*/

// при активация плагина
register_activation_hook(__FILE__, ['TokmakovHelloPlugin', 'activate']);
// при деактивация плагина
register_activation_hook(__FILE__, ['TokmakovHelloPlugin', 'deactivate']);
// при удалении плагина
register_uninstall_hook(__FILE__, ['TokmakovHelloPlugin', 'uninstall']);

// первый символ каждого слова заголовка переводим в верхний регистр
add_filter('the_title', ['TokmakovHelloPlugin', 'title']);

class TokmakovHelloPlugin {

    public static function title($title) {
        return mb_convert_case($title, MB_CASE_TITLE);
    }

    public static function activate() {
        // проверяем права пользователя
        if (!current_user_can('activate_plugins')) {
            return;
        }
        // записываем в лог информацию об активации плагина
        $date = date('d.m.Y H:i:s');
        $message = $date . ' Плагин «Hello, world!» активирован' . PHP_EOL;
        error_log(
            $message,
            3,
            dirname(__FILE__) . '/error.log.txt'
        );
    }

    public static function deactivate() {
        // проверяем права пользователя
        if (!current_user_can('deactivate_plugins')) {
            return;
        }
        // записываем в лог информацию о деактивации плагина
        $date = date('d.m.Y H:i:s');
        $message = $date . ' Плагин «Hello, world!» деактивирован' . PHP_EOL;
        error_log(
            $message,
            3,
            dirname(__FILE__) . '/error.log.txt'
        );
    }

    public static function uninstall() {
        // проверяем права пользователя
        if (!current_user_can('delete_plugins')) {
            return;
        }
        // отправляем письмо администратору об удалении плагина
        wp_mail(
            get_bloginfo('admin_email'),
            'Плагин удален',
            'Плагин «Hello, world!» удален'
        );
    }
}

Добавим еще немного функционала — просматривать записи блога могут только авторизованные пользователи, остальные получат сообщение:

<p>Для просмотра контента необходимо <a href="...">авторизоваться</a> на сайте.</p>
<?php
/*
Plugin Name: Hello, world!
Plugin URI: https://tokmakov.msk.ru
Description: Простой плагин, в целях изучения WordPress.
Version: 1.0
Author: Евгений Токмаков
Author URI: https://tokmakov.msk.ru
*/

// при активация плагина
register_activation_hook(__FILE__, ['TokmakovHelloPlugin', 'activate']);
// при деактивация плагина
register_activation_hook(__FILE__, ['TokmakovHelloPlugin', 'deactivate']);
// при удалении плагина
register_uninstall_hook(__FILE__, ['TokmakovHelloPlugin', 'uninstall']);

// первый символ каждого слова заголовка переводим в верхний регистр
add_filter('the_title', ['TokmakovHelloPlugin', 'title']);

// для просмотра контента необходимо авторизоваться на сайте
add_filter('the_content', ['TokmakovHelloPlugin', 'content']);

class TokmakovHelloPlugin {

    public static function title($title) {
        return mb_convert_case($title, MB_CASE_TITLE);
    }

    public static function content($content) {
        if (is_user_logged_in()) {
            return $content;
        }
        if (is_page()) {
            return $content;
        }
        $auth = '<a href="'.wp_login_url(get_permalink()).'">авторизоваться</a>';
        $content = '<p>Для просмотра контента необходимо ' . $auth . ' на сайте.</p>';
        return $content;
    }

    public static function activate() {
        // проверяем права пользователя
        if (!current_user_can('activate_plugins')) {
            return;
        }
        // записываем в лог информацию об активации плагина
        $date = date('d.m.Y H:i:s');
        $message = $date . ' Плагин «Hello, world!» активирован' . PHP_EOL;
        error_log(
            $message,
            3,
            dirname(__FILE__) . '/error.log.txt'
        );
    }

    public static function deactivate() {
        // проверяем права пользователя
        if (!current_user_can('deactivate_plugins')) {
            return;
        }
        // записываем в лог информацию о деактивации плагина
        $date = date('d.m.Y H:i:s');
        $message = $date . ' Плагин «Hello, world!» деактивирован' . PHP_EOL;
        error_log(
            $message,
            3,
            dirname(__FILE__) . '/error.log.txt'
        );
    }

    public static function uninstall() {
        // проверяем права пользователя
        if (!current_user_can('delete_plugins')) {
            return;
        }
        // отправляем письмо администратору об удалении плагина
        wp_mail(
            get_bloginfo('admin_email'),
            'Плагин удален',
            'Плагин «Hello, world!» удален'
        );
    }
}

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

<?php
/*
Plugin Name: Hello, world!
Plugin URI: https://tokmakov.msk.ru
Description: Простой плагин, в целях изучения WordPress.
Version: 1.0
Author: Евгений Токмаков
Author URI: https://tokmakov.msk.ru
*/

// при активация плагина
register_activation_hook(__FILE__, ['TokmakovHelloPlugin', 'activate']);
// при деактивация плагина
register_activation_hook(__FILE__, ['TokmakovHelloPlugin', 'deactivate']);
// при удалении плагина
register_uninstall_hook(__FILE__, ['TokmakovHelloPlugin', 'uninstall']);

// первый символ каждого слова заголовка переводим в верхний регистр
add_filter('the_title', ['TokmakovHelloPlugin', 'title']);

// для просмотра контента необходимо авторизоваться на сайте
add_filter('the_content', ['TokmakovHelloPlugin', 'content']);

// отправляем письмо администратору при добавлении нового комментария
add_action('comment_post', ['TokmakovHelloPlugin', 'comment']);

class TokmakovHelloPlugin {

    public static function title($title) {
        return mb_convert_case($title, MB_CASE_TITLE);
    }

    public static function content($content) {
        if (is_user_logged_in()) {
            return $content;
        }
        if (is_page()) {
            return $content;
        }
        $auth = '<a href="'.wp_login_url(get_permalink()).'">авторизоваться</a>';
        $content = '<p>Для просмотра контента необходимо ' . $auth . ' на сайте.</p>';
        return $content;
    }

    public static function comment() {
        wp_mail(
            get_bloginfo('admin_email'),
            'Добавлен комментарий',
            'Добавлен новый комментарий к записи'
        );
    }

    public static function activate() {
        // проверяем права пользователя
        if (!current_user_can('activate_plugins')) {
            return;
        }
        // записываем в лог информацию об активации плагина
        $date = date('d.m.Y H:i:s');
        $message = $date . ' Плагин «Hello, world!» активирован' . PHP_EOL;
        error_log(
            $message,
            3,
            dirname(__FILE__) . '/error.log.txt'
        );
    }

    public static function deactivate() {
        // проверяем права пользователя
        if (!current_user_can('deactivate_plugins')) {
            return;
        }
        // записываем в лог информацию о деактивации плагина
        $date = date('d.m.Y H:i:s');
        $message = $date . ' Плагин «Hello, world!» деактивирован' . PHP_EOL;
        error_log(
            $message,
            3,
            dirname(__FILE__) . '/error.log.txt'
        );
    }

    public static function uninstall() {
        // проверяем права пользователя
        if (!current_user_can('delete_plugins')) {
            return;
        }
        // отправляем письмо администратору об удалении плагина
        wp_mail(
            get_bloginfo('admin_email'),
            'Плагин удален',
            'Плагин «Hello, world!» удален'
        );
    }
}

Поиск: CMS • Web-разработка • WordPress • Плагин

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.