Создание плагина
Компоновка плагина
Имя плагина
Файлы плагина
Файл Readme
Заголовки плагина
Стандартная информация о плагине
Лицензия
Программирование плагина
Класс плагина
Паттерн Singleton
Определение путей
Функции активации, деактивации и удаление
Автоматическая загрузка классов
Создать публичный репозиторий на github
Создать свой плагин
Проект вести на github
Стандарты кодирования WordPress
Design Patterns in WordPress: The Singleton Pattern
Паттерн проектирования Singleton на PHP
Создание плагина
-
Компоновка плагина
-
Заголовки плагина
-
Программирование плагина
Пример плагина: github.com/SolomashenkoRoman
Компоновка плагина:
- /step-by-step-development-plugin (директория плагина)
- step-by-step-development-plugin.php (основной php-файл плагина )
- uninstall.php (файл отмены установок плагина)
- /includes (папка для включений PHP)
- /assets
- /js (папка для файлов JavaScript)
- /css (папка для файлов стилей)
- /images (папка для изображений плагина)
Заголовок плагина:
<?php
/*
Plugin Name: Название плагина
Plugin URI: http://страница_с_описанием_плагина_и_его_обновлений
Description: Краткое описание плагина.
Version: Номер версии плагина, например: 1.0
Author: Имя автора плагина
Author URI: http://страница_автора_плагина
*/
?>
Например:
/*
Plugin Name: Step By Step Development Plugin
Plugin URI: https://github.com/SolomashenkoRoman/step-by-step-development-plugin
Description: Step by step development of the plugin.
Version: 1.0
Author: romansolomashenko
Author URI: https://www.linkedin.com/in/solomashenkoroman/
License: A «Slug» license name e.g. GPL2
*/
Лицензия:
Чтобы использовать эту лицензию для вашего плагина, внесите в комментарий год, имя и электронный адрес автора. После этого ваш плагин будет лицензирован в соответствии GPL.
<?php
/* Copyright ГОД ИМЯ_АВТОРА_ПЛАГИНА (email: E-MAIL_АВТОРА)
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
?>
Паттерн Singleton:
namespace includes;
class StepByStepPlugin
{
private static $instance = null;
private function __construct() { }
public static function getInstance() {
if ( null == self::$instance ) {
self::$instance = new self; }
return self::$instance; }
}
StepByStepPlugin::getInstance();
Для определения URL к любому файлу в директории плагина существует функция plugins_url() :
<?php echo ‘<img src=»’ .plugins_url( ’images/icon.png’, __FILE__ ). ?>
Видно, что функция plugins_url( ) принимает два параметра. Первый параметр это путь относительно URL плагина, второй файл плагина, на который вы хотите
сослаться
WordPress снабжен различными функциями для определения URL:
- admin_url() — администраторский URL (http://…/my-first-site-en/wp-admin/).
- site_url() — URL сайта для текущего сайта (http://…/my-first-site-en/).
- home_url() — домашний URL текущего сайта (http://…/my-first-site-en/).
- includes_url() — URL директории Includes (http://…/my-first-site-en/wp-includes/).
- content_url() — URL директории Content ( http:/…/my-first-site-en/wp-content/).
- wp_upload_dir() — возвращает массив с локальной информацией по сконфигурированной директории загрузок.


admin
Скомпоновал файловую систему плагина (из папок и отдельных файлов):
— wp-my-homework.php (в папке плагина основной php-файл)
— uninstall.php (файл отмены установок плагина)
— /includes (папка включений PHP)
— /assets/js (папка для файлов JavaScript)
— /assets/css (папка для файлов стилей)
— /assets/images (папка для изображений)
— /includes/common/MyHomeWorkAutoload.php (автоматическая загрузка классов)
— /includes/MyHomeWorkPlugin.php (первый класс ядра плагина)
— readme.txt (стандартная информация)
— config-path.php (конфигурация путей плагина)
— /languages (папка локализации языков плагина)
Разместил стандартный заголовок плагина в основном файле wp-my-homework.php,
подключил следующие файлы:
require_once plugin_dir_path(__FILE__) . ‘/config-path.php’;
require_once HOMEWORK_PlUGIN_DIR.’/includes/common/MyHomeWorkAutoload.php’;
require_once HOMEWORK_PlUGIN_DIR.’/includes/MyHomeWorkPlugin.php’;
Установил конфигурацию путей плагина в config-path.php:
define(«HOMEWORK_PlUGIN_DIR», plugin_dir_path(__FILE__));
define(«HOMEWORK_PlUGIN_URL», plugin_dir_url( __FILE__ ));
зачистил ярлык плагина:
define(«HOMEWORK_PlUGIN_SLUG», preg_replace( ‘/[^\da-zA-Z]/i’, ‘_’, basename(HOMEWORK_PlUGIN_DIR)));
define(«HOMEWORK_PlUGIN_TEXTDOMAIN», str_replace( ‘_’, ‘-‘, HOMEWORK_PlUGIN_SLUG ));
локализовал версию, опции, папку с переводами
define(«HOMEWORK_PlUGIN_OPTION_VERSION», HOMEWORK_PlUGIN_SLUG.’_version’);
define(«HOMEWORK_PlUGIN_OPTION_NAME», HOMEWORK_PlUGIN_SLUG.’_options’);
define(«HOMEWORK_PlUGIN_DIR_LOCALIZATION», plugin_basename(HOMEWORK_PlUGIN_DIR.’/languages/’));
Определил следующие инструкции в файле первого класса плагина (/includes/MyHomeWorkPlugin.php):
namespace includes;
class MyHomeWorkPlugin
{
protected function __construct() {
}
}
— добавил в этот класс паттерн Singleton
— добавил в этот класс функцию activation с влючением лога ошибок (дебага) и хук активации:
function homework_activate() {
// debug.log
error_log(‘plugin ‘.HOMEWORK_PlUGIN_NAME.’ activation’);
}
— добавил в этот класс функцию homework_deactivate с выключением лога ошибок:
static public function homework_deactivate() {
// debug.log
error_log(‘plugin ‘.HOMEWORK_PlUGIN_NAME.’ deactivation’);
}
— а также хуки активации и дезактивации в wp-my-homework.php (в папке плагина основной php-файл):
register_activation_hook( __FILE__, ‘homework_activate’ );
register_deactivation_hook( __FILE__, ‘homework_deactivate’ );
— в завершение описания класса (MyHomeWorkPlugin) реализовал команду возврата singleton (одиночного экземпляра):
MyHomeWorkPlugin::getInstance();
— подключил автоматическую загрузку классов в файле /includes/common/MyHomeWorkAutoload.php:
namespace includes\common;
class HomeWorkAutoload
{
private static $instance = null;
private function __construct() {
spl_autoload_register(array($this, ‘autoloadNamespace’));
}
public static function getInstance(){
if ( null == self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
/**
* @param $HomeWorkAutoload
*/
public function autoloadNamespace($HomeWorkAutoload){
$fileClass = HOMEWORK_PlUGIN_DIR.’/’.str_replace(«\\»,»/»,$HomeWorkAutoload).’.php’;
if (file_exists($fileClass)) {
if (!class_exists($fileClass, FALSE)) {
require_once $fileClass;
}
}
}
}
HomeWorkAutoload::getInstance();
Активировал новый плагин