Создать плагин для WordPress

WordPress является самой мощной CMS. Существует большое количество бесплатных плагинов для WordPress и это является главной причиной успеха этой CMS среди конкурентов. Для скачивания бесплатно доступно около 21000 плагинов на официальном сайте WordPress.

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

1. Создать плагин для WordPress

Если нет каталога /wp-content/plugins создаём его. Внутри этого каталога, создаём файл с названием wp-demo-plugin.php, это будет основной файл для плагина. Если нужно назвать главный файл по другому, запоминаем что название файлов должно быть с дефисом (-) для разделения слов.

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

<?php
/* Plugin Name: Demo Plugin
Plugin URI: http://htmlhook.ru
Description: Получать уведомления на email, когда ваш любимый автор публикует сообщение.
Version: 1.0
Author URI: http://htmlhook.ru
Author: Viktor Klim
License: GPL2
*/ ?>

После того как добавили комменты, название плагина, автора и т.д можно увидеть в разделе плагины, как показано ниже.

Сделать плагин для WordPress
Плагин для WordPress
к меню ↑

2. Модуль: Активировать и Деактивировать

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

к меню ↑

Крюк активации плагина

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

function wp_demo_activation() {
  }
  register_activation_hook(__FILE__, 'wp_demo_activation');

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

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

Код основного файла:

<?php
/* Plugin Name: Demo Plugin
Plugin URI: http://htmlhook.ru/sozdat-plugin-wordpress.html
Description: Получать уведомления на email, когда ваш любимый автор публикует сообщение.
Version: 1.0
Author URI: http://htmlhook.ru
Author: Viktor Klim
License: GPL2
*/
function wp_demo_activation() {
  }
  register_activation_hook(__FILE__, 'wp_demo_activation');

Теперь можно активировать плагин, посмотрите что будет…

к меню ↑

Крюк деактивация плагина

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

<?php
/* Plugin Name: Demo Plugin
Plugin URI: http://htmlhook.ru/sozdat-plugin-wordpress.html
Description: Получать уведомления на email, когда ваш любимый автор публикует сообщение.
Version: 1.0
Author URI: http://htmlhook.ru
Author: Viktor Klim
License: GPL2
*/
function wp_sample_activation() {
  }
  register_activation_hook(__FILE__, 'wp_demo_activation');
  register_deactivation_hook( __FILE__, 'wp_demo_activation' );
к меню ↑

3. Создание пользовательских таблиц

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

global $wpdb;
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}sample_table");
$sql1 = "CREATE TABLE {$wpdb->prefix}sample_table ( id int(11) NOT NULL AUTO_INCREMENT,
                                                       activation_code varchar(255) NOT NULL,
                                                       email varchar(75) NOT NULL,
                                                       status int(11) NOT NULL, PRIMARY KEY  (id) )
         ENGINE=InnoDB AUTO_INCREMENT=1;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql1);

Теперь, код основного файла плагина будет:

<?php
/* Plugin Name: Demo Plugin
Plugin URI: http://htmlhook.ru/sozdat-plugin-wordpress.html
Description: Получать уведомления на email, когда ваш любимый автор публикует сообщение.
Version: 1.0
Author URI: http://htmlhook.ru
Author: Viktor Klim
License: GPL2
*/
function wp_sample_activation() {
  }
  register_activation_hook(__FILE__, 'wp_demo_activation');
  register_deactivation_hook( __FILE__, 'wp_demo_activation' );
  global $wpdb;
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}demo_table");
$sql1 = "CREATE TABLE {$wpdb->prefix}demo_table ( id int(11) NOT NULL AUTO_INCREMENT,
activation_code varchar(255) NOT NULL,
                                                       email varchar(75) NOT NULL,
                                                       status int(11) NOT NULL, PRIMARY KEY  (id) )
         ENGINE=InnoDB AUTO_INCREMENT=1;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql1);

Но сначала, проверьте, существует ли таблица, прежде чем создать файл. Вы можете решить, удалять и создавать таблицы для активации на основе ваших требований. Перед названием таблицы использовано {$wpdb->prefix}. Как правило, таблицы WordPress с префиксом wp_. Это может быть изменено при установки базы данных, так что это wp_ это просто по умолчанию, в качестве префикса для обеспечения повышенной гибкости.

{$wpdb->prefix} назначается префикс для текущей установки. Теперь всегда использовать этот синтаксис, перед новым названием таблицы, которую вы создаёте.

Даже если используете функции $wpdb->query для создания таблиц, рекомендуется использовать функции dbDelta, они сравнивают текущую структуру таблицы. Это не загружаются по умолчанию, поэтому вам нужно включить это в файл в первую очередь.

к меню ↑

4. Скрипты и стили

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

add_action('wp_enqueue_scripts', 'demo_scripts');
function demo_scripts() {
  wp_enqueue_script('jquery');
  wp_register_style('demo_style', plugins_url('styles.css', __FILE__));
  wp_enqueue_style('demo_style');
  wp_register_script('jqueryUICore', plugins_url('ui/jquery.ui.core.js', __FILE__),array(“jQuery”));
  wp_enqueue_script('jqueryUICore');
  $config_array = array(“demo_name”=>“demo_value”);
  wp_localize_script('jqueryUICore', 'demoData', $config_array);
}

Вы можете сначала использовать wp_register_style для регистрации файла стиля и включить файл wp_enqueue_style. Уникальный идентификатор и должен быть указан путь к файлу стилей. Затем подключите сценарии с использованием функции wp_enqueue_script. Если они зависят от других сценариев, вы можете отметить его в качестве третьего параметра. Я использовал JQuery как зависимый.

Наконец, вы можете добавить данные, которые будут использоваться в конкретные сценарии, используя функции wp_localize_script. Вы можете подключить скрипты всякий раз, когда нужно, но всегда используйте свои функции wp_enqueue_scripts и wp_enqueue_styles.
Убедитесь в том, что используете admin_enqueue_script вместо wp_enqueue_script для администратора. Код основного файла теперь такой:

<?php
/* Plugin Name: Demo Plugin
Plugin URI: http://htmlhook.ru/sozdat-plugin-wordpress.html
Description: Получать уведомления на email, когда ваш любимый автор публикует сообщение.
Version: 1.0
Author URI: http://htmlhook.ru
Author: Viktor Klim
License: GPL2
*/
function wp_sample_activation() {
  }
  register_activation_hook(__FILE__, 'wp_demo_activation');
  register_deactivation_hook( __FILE__, 'wp_demo_activation' );
  global $wpdb;
$wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}demo_table");
$sql1 = "CREATE TABLE {$wpdb->prefix}demo_table ( id int(11) NOT NULL AUTO_INCREMENT,
activation_code varchar(255) NOT NULL,
                                                       email varchar(75) NOT NULL,
                                                       status int(11) NOT NULL, PRIMARY KEY  (id) )
         ENGINE=InnoDB AUTO_INCREMENT=1;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql1);
add_action('wp_enqueue_scripts', 'demo_scripts');
function demo_scripts() {
  wp_enqueue_script('jquery');
  wp_register_style('demo_style', plugins_url('styles.css', __FILE__));
  wp_enqueue_style('demo_style');
  wp_register_script('jqueryUICore', plugins_url('ui/jquery.ui.core.js', __FILE__),array(“jQuery”));
  wp_enqueue_script('jqueryUICore');
  $config_array = array(“demo_name”=>”demo_value”);
  wp_localize_script('jqueryUICore', 'demoData', $config_array);
}
к меню ↑

5. Создание шорткодов

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

Вы можете создавать короткие вставки с помощью следующего синтаксиса.

add_shortcode("shortcode_name", "shortcode_function");
function shortcode_function() {
  return “<input type=’button’ value=’Share’ /> “;
}

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

shortcode используется на страницах, сообщениях или для плагинов. Для отображения кнопки, вставляйте следующий синтаксис:

[shortcode_name]
к меню ↑

6. Фильтрация содержимого

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

function demo_content_filter($content) {
  $banners = “HTML for banners”;
  $author = “HTML for author info”;
  return $banners.$content.$author;
}
add_filter( 'the_content', 'demo_content_filter' );

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

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

function demo_content_filter($content) {
  if(is_single()){
  return $banners.$content.$author;
  }
}
к меню ↑

7. Работа с Ajax

Вы должны знать, как использовать Ajax в WordPress обеспечить интерактивный контент (внешнее содержание) для пользователей.

$.post("admin-ajax.php", { action:"demo_ajax_action" },
function(result, textStatus) {
}, "json");

Самое главное в приведенном выше запросе Ajax является действием. Он будет использоваться в коде WordPress для идентификации запроса. Кроме того, все Ajax запросы должны быть направлены в файл admin-ajax.php.

function sample_ajax_action() {
echo json_encode($your_result_array); exit;
}
add_action('wp_ajax_nopriv_demo_ajax_action', 'demo_ajax_action');
add_action('wp_ajax_demo_ajax_action', 'demo_ajax_action');

Вы можете увидеть одинаковое название, используемые в Ajax здесь с wp_ajax_nopriv_ и wp_ajax_prefixes. wp_ajax_ используется для зарегистрированных пользователей, и wp_ajax_nopriv_ используется для пользователей, которые не вошли.

к меню ↑

8. Написание SQL запросов

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

add_action('add_meta_boxes', 'add_custom_fields_box');
function add_custom_fields_box() {
  add_meta_box('custom_fields_box_id', 'Custom Info', 'display_custom_info_box', 'post', 'normal', 'high');
}
function display_custom_info_box() {
global $post;
$html = "<table><tr><td>Поставить флажок</td><td><input id='custom_checkbox' type='checkbox' name='custom_checkbox' /></td></tr> <tr><td>Сделайте выбор</td><td><select name='custom_select'> <option>Список</option> </select></td></tr> <tr><td>Добавить файл</td><td><input id='custom_file' type='file' name='custom_file' /></td></tr></table>";
echo $html;
}

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

к меню ↑

9. Добавление вариантов бокса

WordPress предоставляет стандартный набор в таких областях, как title, content, image, и excerpt в окне создания контента. Нам нужны пользовательские поля, чтобы добавить дополнительные действия. Хотя мы можем использовать пользовательский раздел поля, он обеспечивает только текстовые поля. Нам нужно добавить отдельные поля, если нам нужно, флажки, радио-кнопки, раскрывающиеся меню и тому подобное.

Мы можем легко создать вариант бокса для предоставления дополнительных полей, как показано ниже.

add_action('add_meta_boxes', 'add_custom_fields_box');
function add_custom_fields_box() {
  add_meta_box('custom_fields_box_id', 'Custom Info', 'display_custom_info_box', 'post', 'normal', 'high');
}
function display_custom_info_box() {
global $post;
$html = "<table><tr><td>Поставить флажок</td><td><input id='custom_checkbox' type='checkbox' name='custom_checkbox'  /></td></tr> <tr><td>Сделайте выбор</td><td><select name='custom_select'> <option>Список</option> </select></td></tr> <tr><td>Добавить файл</td><td><input id='custom_file' type='file' name='custom_file' /></td></tr></table>";
echo $html;
}

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

к меню ↑

10. Использование одноразовых вставок плагина для безопасности

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

Вы можете создать одноразовое значение, используя следующий код:

wp_nonce_field('demo_frm_nonce', 'demo_frm_nonce');

Первый параметр является уникальным идентификатором, а второй параметр будет использоваться в качестве скрытых имён поля формы. После отправки формы, вы можете проверить значение одноразовой вставки, используя код ниже.

if (!isset($_POST['demo_frm_nonce']) || !wp_verify_nonce($_POST['demo_frm_nonce'], 'demo_frm_nonce')){
  return;
}

Если данное время не проверяется, запрос дальше не обрабатывается.

WordPress Plugin API огромен, не просто запомнить все что с ним связано. То, что здесь написано это только 10 наиболее распространенных вещей, которые возможно вам потребуется в процессе создания плагинов. Предлагайте мне для обзора свои плагины.