Создание плагина WordPress

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

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

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

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

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

Имя плагина

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

Файлы плагина

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

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

Файл Readme

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

Домашняя страница

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

Заголовки файла

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

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

Стандартная информация о плагине

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

Формат заголовка следующий:

<?php

/*

Plugin Name: Название плагина

Plugin URI: http://страница_с_описанием_плагина_и_его_обновлений

Description: Краткое описание плагина.

Version: Номер версии плагина, например: 1.0

Author: Имя автора плагина

Author URI: http://страница_автора_плагина

*/

?>

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

Лицензия

Дальше нужно внести информацию о лицензии. Обычно плагины базируются на лицензии GPL, или на другой, совместимой с 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

*/

?>

Программирование плагина

Программирование плагина

Далее идут команды плагина, благодаря которым он выполняет свои задачи.

Зацепки (Hook) плагина

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

Хуки действия (Actions) указывают, какие действия нужно выполнять по собственному коду. Например, после нажатия пользователем кнопки выхода со страниц сайта, вывести форму обратной связи. Есть еще хуки фильтры (Filters). Они представляют собой своеобразные фильтры, при помощи которых отдельным значениям задаются свои параметры. Например, используя хук «customize» можно настроить вывод названий определенным шрифтом, или прикрепление к статьям ссылок на связанные с ними страницы.

Чтобы запустить хук-действие необходимо сначала прописать php функцию, и подключить ее к заданному событию. Функция подключается к событию при помощи следующей конструкции:

add_action ( ‘hook_name’, ‘your_function_name’, [priority], [accepted_args] );

Каждое значение необходимо. Здесь видно, что сначала вставляется название события (‘hook_name’), потом название функции, вступающей в действие при наступлении события (‘your_function_name’), далее идет число, определяющее порядок выполнения функции (по умолчанию ставится 10), в конце прописывается количество аргументов, передаваемых функции (по умолчанию ставится 1).

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

add_filter ( ‘hook_name’, ‘your_filter’, [priority], [accepted_args] );

Теги шаблонов

Добавить ту или иную функцию сайту при помощи плагина можно другим способом – используя теги шаблонов. Автор плагина может прописать соответствующую функцию PHP и сделать ее доступной для пользователей. Для объявления тега шаблона нужно разместить эту функцию на странице плагина или вставить ее в главный файл, который будет скачиваться пользователями. Далее пользователи смогут размещать теги там, где они будут уместны и где их будет легче применить. Так, теги одних плагинов лучше размещать в самой теме сайта, другие – в панели управления, и т. д.

Прибегая к реализации тегов шаблонов желательно в сопроводительной документации или инструкции приводить примеры их вставки с указанием места размещения значений <?php и ?>.

Сохранение данных плагина в базе

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

[ref text=”WordPress options mechanism” url=”//codex.wordpress.org/Writing_a_Plugin#Saving_Plugin_Data_to_the_Database”].

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

[ref text=”WordPress’ Post Meta” url=”//codex.wordpress.org/Writing_a_Plugin#Saving_Plugin_Data_to_the_Database”].

Чтобы создать таблицу MySQL следует отправить SQL-запрос в [ref text=”phpMyAdmin” url=”//codex.wordpress.org/phpMyAdmin”]. Но можно просто добиться автоматического создания таблиц при размещении плагинов.

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

Механизм настроек WordPress

файл functions.php

Для автоматического сохранения настроек плагина применяются специальные страницы настроек. Чтобы страница настроек появилась в административной панели, необходимо в файл functions.php вставить правильно прописанный код. Вот пример такого кода:

<?php

$true_page = ‘myparameters.php’; // это часть URL страницы, рекомендую использовать строковое значение, т.к. в данном случае не будет зависимости от того, в какой файл вы всё это вставите

/*

* Функция, добавляющая страницу в пункт меню Настройки

*/

function true_options() {

global $true_page;

add_options_page( ‘Параметры’, ‘Параметры’, ‘manage_options’, $true_page, ‘true_option_page’);

}

add_action(‘admin_menu’, ‘true_options’);

/**

* Возвратная функция (Callback)

*/

function true_option_page(){

global $true_page;

?><div class=”wrap”>

<h2>Дополнительные параметры сайта</h2>

<form method=”post” enctype=”multipart/form-data” action=”options.php”>

<?php

settings_fields(‘true_options’); // меняем под себя только здесь (название настроек)

do_settings_sections($true_page);

?>

<p class=”submit”>

<input type=”submit” class=”button-primary” value=”<?php _e(‘Save Changes’) ?>” />

</p>

</form>

</div><?php

}

/*

* Регистрируем настройки

* Мои настройки будут храниться в базе под названием true_options (это также видно в предыдущей функции)

*/

function true_option_settings() {

global $true_page;

// Присваиваем функцию валидации ( true_validate_settings() ). Вы найдете её ниже

register_setting( ‘true_options’, ‘true_options’, ‘true_validate_settings’ ); // true_options

// Добавляем секцию

add_settings_section( ‘true_section_1’, ‘Текстовые поля ввода’, ”, $true_page );

// Создадим текстовое поле в первой секции

$true_field_params = array(

‘type’ => ‘text’, // тип

‘id’ => ‘my_text’,

‘desc’ => ‘Пример обычного текстового поля.’, // описание

‘label_for’ => ‘my_text’ // позволяет сделать название настройки лейблом (если не понимаете, что это, можете не использовать), по идее должно быть одинаковым с параметром id

);

add_settings_field( ‘my_text_field’, ‘Текстовое поле’, ‘true_option_display_settings’, $true_page, ‘true_section_1’, $true_field_params );

// Создадим textarea в первой секции

$true_field_params = array(

‘type’ => ‘textarea’,

‘id’ => ‘my_textarea’,

‘desc’ => ‘Пример большого текстового поля.’

);

add_settings_field( ‘my_textarea_field’, ‘Большое текстовое поле’, ‘true_option_display_settings’, $true_page, ‘true_section_1’, $true_field_params );

// Добавляем вторую секцию настроек

add_settings_section( ‘true_section_2’, ‘Другие поля ввода’, ”, $true_page );

// Создадим чекбокс

$true_field_params = array(

‘type’ => ‘checkbox’,

‘id’ => ‘my_checkbox’,

‘desc’ => ‘Пример чекбокса.’

);

add_settings_field( ‘my_checkbox_field’, ‘Чекбокс’, ‘true_option_display_settings’, $true_page, ‘true_section_2’, $true_field_params );

// Создадим выпадающий список

$true_field_params = array(

‘type’ => ‘select’,

‘id’ => ‘my_select’,

‘desc’ => ‘Пример выпадающего списка.’,

‘vals’ => array( ‘val1’ => ‘Значение 1’, ‘val2’ => ‘Значение 2’, ‘val3’ => ‘Значение 3’)

);

add_settings_field( ‘my_select_field’, ‘Выпадающий список’, ‘true_option_display_settings’, $true_page, ‘true_section_2’, $true_field_params );

// Создадим радио-кнопку

$true_field_params = array(

‘type’ => ‘radio’,

‘id’ => ‘my_radio’,

‘vals’ => array( ‘val1’ => ‘Значение 1’, ‘val2’ => ‘Значение 2’, ‘val3’ => ‘Значение 3’)

);

add_settings_field( ‘my_radio’, ‘Радио кнопки’, ‘true_option_display_settings’, $true_page, ‘true_section_2’, $true_field_params );

}

add_action( ‘admin_init’, ‘true_option_settings’ );

/*

* Функция отображения полей ввода

* Здесь задаётся HTML и PHP, выводящий поля

*/

function true_option_display_settings($args) {

extract( $args );

$option_name = ‘true_options’;

$o = get_option( $option_name );

switch ( $type ) {

case ‘text’:

$o[$id] = esc_attr( stripslashes($o[$id]) );

echo “<input class=’regular-text’ type=’text’ id=’$id’ name='” . $option_name . “[$id]’ value=’$o[$id]’ />”;

echo ($desc != ”) ? “<br /><span class=’description’>$desc</span>” : “”;

break;

case ‘textarea’:

$o[$id] = esc_attr( stripslashes($o[$id]) );

echo “<textarea class=’code large-text’ cols=’50’ rows=’10’ type=’text’ id=’$id’ name='” . $option_name . “[$id]’>$o[$id]</textarea>”;

echo ($desc != ”) ? “<br /><span class=’description’>$desc</span>” : “”;

break;

case ‘checkbox’:

$checked = ($o[$id] == ‘on’) ? ” checked=’checked'” : ”;

echo “<label><input type=’checkbox’ id=’$id’ name='” . $option_name . “[$id]’ $checked /> “;

echo ($desc != ”) ? $desc : “”;

echo “</label>”;

break;

case ‘select’:

echo “<select id=’$id’ name='” . $option_name . “[$id]’>”;

foreach($vals as $v=>$l){

$selected = ($o[$id] == $v) ? “selected=’selected'” : ”;

echo “<option value=’$v’ $selected>$l</option>”;

}

echo ($desc != ”) ? $desc : “”;

echo “</select>”;

break;

case ‘radio’:

echo “<fieldset>”;

foreach($vals as $v=>$l){

$checked = ($o[$id] == $v) ? “checked=’checked'” : ”;

echo “<label><input type=’radio’ name='” . $option_name . “[$id]’ value=’$v’ $checked />$l</label><br />”;

}

echo “</fieldset>”;

break;

}

}

/*

* Функция проверки правильности вводимых полей

*/

function true_validate_settings($input) {

foreach($input as $k => $v) {

$valid_input[$k] = trim($v);

/* Вы можете включить в эту функцию различные проверки значений, например

if(! задаем условие ) { // если не выполняется

$valid_input[$k] = ”; // тогда присваиваем значению пустую строку

}

*/

}

return $valid_input;

}

Этот код следует заполнить своими данными, потом его можно копировать и размещать. Останется только отредактировать поля в консоли.

Панели администирования

Чтобы пользователи, установившие плагин, могли его настраивать, автор должен создать привязанное к нему административное меню. Это делается при помощи кода такого типа:

add_menu_page($page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );

Этот код вставляется в файл functions.php. Каждое значение нужно заменить на свои данные. Например, page_title – это заголовок страницы, capability – значение уровня доступа к меню, и т. д.

Интернационализация плагина

Интернационализация плагина

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

add_action(‘init’, array(&$this, ‘ap_action_init’));

function ap_action_init() {

вводится функция:

load_plugin_textdomain(‘wp-social-likes’, false, dirname( plugin_basename( __FILE__ ) ) . ‘/languages/’);

далее находят все строки, которые подлежат переводу и помещают их в аргументы __() и _e().

После этого создается шаблон перевода. Это можно выполнить автоматически, применив входящую в комплектацию GNU gettext tools for Windows программу xgettext.

Завершается процесс интернационализации созданием двух файлов – po и mo. Первый из них – это перевод в понятном читабельном виде. Его создают при помощи специальных программ или вручную, используя блокнот. Mo-файл, это вариант po, скомпилированный в машинный код. Его создание тоже может быть осуществлено в специальной программе.

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

    Комментарии и отзывы

    avatar
      Подписаться  
    На:
    Adblock
    detector