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

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

План работ:

  • Разбираемся с добавлением плагина в Wordpress
  • Пишем скрипт вывода нашего блока.
  • Запись информации в дополнительное поле.
  • Заметки на полях и дополнительная информация

Ну что же, приступим. Собираемся с мыслями, набираемся терпения, а так же внимания и идем в бой!

1 этап: Как создать простейший плагин на WordPress

Для начала стоит отметить, что все названия (папка плагина, названия функций и классов) должны быть уникальными. Создадим папку у себя на компьютере и назовем её atb_for_wp (расшифровывается: add test block for wordpress), вы конечно же можете называть по-своему, но для начала, давайте будем делать одинаково, чтобы не возникало никаких лишних вопросов и проблем. Заходим в нашу свежеиспеченную папочку, создаем одноименный файл atb_for_wp.php и открываем его. Начнем с самого простого. Каждый плагин wordpress имеет своего автора, название, описание, версию, лицензию, собственную ссылку и ссылку на автора. Так давайте начнем именно с этого.

Сохраним наш плагин и зальем его по FTP в папку wp-content/plugins (Добавлять файл нужно вместе с папкой). Теперь мы можем активировать наш плагин. Переходим в админку, в раздел плагинов wordpress дополнительные поля, переключаемся на неактивные и видим наш новенький плагин. Его можно даже активировать, но пока это бессмысленно, так как никакого функционала плагин не имеет.


2 этап: Как сделать вывод дополнительного блока

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

?php 
add_action('add_meta_boxes', 'atb_box'); // Вызываем хук и цепляем к функции atb_box
function atb_box() {
add_meta_box( // Сама функция добавления блока
'atb_field', // Что-то вроде ID. Очень желательно чтобы не повторялось
'Название нашего поля', // Выводится в админке
'atb_box_func', // Функция которая вызывается. (с разметкой HTML)
'post', // Тип записи (post, page... произвольные типы записей тоже можно)
'normal' // Расположение коробки ('normal', 'advanced' или 'side')
);
}
function atb_box_func($post){
// Сразу назначим переменные. Чтобы не путаться название переменных сделаем совпадающими с названием произвольных полей
$atb_radio = get_post_meta($post--->ID, 'atb_radio', 1); // Это радиокнопка (input[type="radio"])
$atb_sting = get_post_meta($post->ID, 'atb_sting', 1); // Это строка (input[type="text"])

?>
Тест радиокнопки
<label><input type="radio" name="extra[atb_radio]" value="1">Да</label>
<label><input type="radio" name="extra[atb_radio]" value="0">Нет</label>
<p>Тест строки
<label><input type="text" name="extra[atb_sting]" value="<? if($atb_sting){echo $atb_sting;}?>"></label>
</p>
<input type="hidden" name="atb_nonce" value="<?php echo wp_create_nonce(__FILE__); ?>">
?php 
}

А теперь словами про вывод дополнительных полей wordpress. В админку выводим две радио-кнопки и текстовое поле. Скрытое поле atb_nonce это ничто иное как проверка. Можно конечно сделать проверку по типу записи, тогда вам предстоит удалить соответствующую строку в следующем блоке кода, а на её место написать другое условие.

 

3 этап: Записываем содержимое нашего блока в стандартные дополнительные поля.

add_action('save_post', 'atb_box_update'); // Вызываем функцию при сохранении
function atb_box_update($post_id){
if (!wp_verify_nonce($_POST['atb_nonce'], __FILE__)) return false; // Проверка, что сохраняется именно нужная нам страница.
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return false; // Проверка, что это не автосохранение
if (!current_user_can('edit_post', $post_id)) return false; // Проверка, что пользователь может изменять этот пост
if(!isset($_POST['extra']) ) return false;// Проверка, что нам пришли все поля
foreach($_POST['extra'] as $key=>$value){ // Циклом добавляем поля. Можно и в ручную это делать... Но так проще добавить новое поле
if(empty($value) AND $value != 0){ // Если значение пустое и не равно 0
delete_post_meta($post_id, $key); // Удаляем это поле из мета-данных
continue; // Продолжаем
}
update_post_meta($post_id, $key, $value); // Обновляем или добавляем мета-данные
}
return $post_id;
}

   

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

   

Заметки на полях.

   

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

   

Просто архивируем папку с плагином в формате .zip, далее переходим в админку -> плагины -> добавить новый. Жмем на кнопочку загрузить и загружаем наш архив. А дальше всё как при установке любого другого плагина.

   

  • Не обязательно создавать папку, если ваш плагин состоит из одного файла.

   

Достаточно просто поместить файл в директорию wp-content/plugins, но это считается плохим тоном. Гораздо практичнее когда у каждого плагина своя папка.

   

  • Данный плагин расчитан только на записи (страницы блога)

   

Для того чтобы перенести его на страницы вам нужно подправить функцию atb_box на

function atb_box() {
add_meta_box( // Сама функция добавления блока
'atb_field', // Что-то вроде ID. Очень желательно чтобы не повторялось
'Название нашего поля', // Выводится в админке
'atb_box_func', // Функция которая вызывается. (с разметкой HTML)
'page', // Тип записи (post, page... произвольные типы записей тоже можно)
'normal' // Расположение коробки ('normal', 'advanced' или 'side')
);
}

   

И тогда плагин будет работать со страницами, а не с записями

   

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

   

Буду рад вашим вопросам и пожеланиям. Скачать итоговый результат данного урока вы можете по этой ссылке: atb_for_wp.zip

Понравилось? Репост!

Читайте также

Никола
Думаю даже новичок в php и начинающий пользователь wordpress без труда разберется здесь. Пример отличный, вполне готовое решение)
Gavrish
Вроде бы все ясно, но еще лучше было бы видео глянуть) У вас случаянно нет своего канала на ютубе?
Алексей
Если бы были видео, действительно было бы интереснее и удобнее. Понимаю, что это уже достаточно тяжело, но как вектор для развития-отличный.
Алексей
Если бы были видео, действительно было бы интереснее и удобнее. Понимаю, что это уже достаточно тяжело, но как вектор для развития-отличный.
Алиса
Те, кто хоть немного в теме, в принципе должны с легкостью разобраться, т.к. статейка достаточно легкая и удобно написана. Видео это уже другой формат
gringostar
А что делает этот плагин? Я установил, и никаких изменений, где его панель в админке?