Лучшие практики

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

Добавляйте префиксы

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

Несколько примеров использования префиксов в коде:

if( ! function_exists('myplugin_init' ) ){
	function myplugin_init(){
		register_setting( 'myplugin_setting_example', 'foo' );
		register_setting( 'myplugin_setting_demo', 'bar' );
	}
}

if( ! function_exists( 'myplugin_get_demo_setting' ) ){
	function myplugin_get_demo_setting(){
		return get_option( 'myplugin_setting' );
	}
}

/* File path: settings/myplugin_example.php */

Организуйте файлы

Корневой уровень папки с плагином должен содержать файл plugin-name.php и, опционально, файл для деинсталляции. Все остальные файлы по возможности должны быть собраны в папки.

Правилом хорошего тона и необязательным стандартом, считается назвать главный файл плагина также как называется папка плагина: например: plugin-name/plugin-name.php

Также полезно отделять код администратора и использовать условие is_admin(), чтобы не загружать его, когда не требуется. Например, в главном файле плагина возможно следующее:

if( is_admin ){
	// мы в админ-панели
	require_once dirname(__file__) . '/admin/myplugin_admin.php';
}

Структурируйте папки

Четкая структура папок поможет вам и другим разработчикам лучше работать с плагином. Поэтому держите подобные файлы вместе. Например, разместите файлы JavaScript в папку /js, файлы стилей в /css, и изображения в папке /images.

Образец структуры папок для справки:

/my-plugin-name
	/admin
	/js
	/css
	/images
	/includes
	/settings
	my-plugin-name.php
	uninstall.php

Определитесь с архитектурой

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

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

Примеры архитектур

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

  • Единый файл плагина, содержащий класс, экземпляр объекта и опционально функции - пример

  • Главный файл плагина и один или более файлов классов. За пример можно взять шаблон плагина WordPress Plugin Boilerplate - это стандартная объектно-ориентированная основа. У этого шаблона также есть генератор: WordPress Plugin Boilerplate Generator

  • Единый файл плагина, содержащий функции - пример Hello Dolly

Подробнее про архитектуры (статьи на англ.)

Конкретные реализации более сложных вышеуказанных примеров организации кода уже написаны в качестве учебных пособий и слайдов:

Готовые шаблоны (макеты) для создания плагина

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

Они также служат в качестве дополнительных примеров различных, но сравнимых архитектур:

  • WordPress Plugin Boilerplate: основа для развития WordPress плагина, которая призвана обеспечить четкую и последовательную инструкцию для строительства.

  • WordPress Plugin Bootstrap: основа, чтобы построить плагин WordPress используя Grunt, Compass, GIT, и SVN.

  • WP Skeleton Plugin: Скелет плагина, фокусирующийся на юнит-тестах и использовании composer для разработки.

  • General search for WordPress plugin boilerplates on GitHub: поиск на гитхабе шаблонов для плагинов.