Пишем плагин-виджет для Wordpress и публикуем в репозитории
Написание виджетов для WordPress является для разработчиков постоянной задачей, потому что через виджеты очень легко выводить какую-либо дополнительную или справочную информацию.
Создание виджета ничем не отличается от написания плагина для WordPress, которую я писал в предыдущей статье. Но в этот раз, я хотел бы рассказать не только о том, как написать свой виджет, но о том, как добавить плагин в репозиторий WordPress.Написание плагина всегда начинается с его названия, поэтому, свой я назвал «Attach Files Widget». Этот виджет позволяет прикреплять любые файлы которые вы загрузите или уже загружены в ваш WordPress. Плагин достаточно простой и показывает базовые основы написания подобных.
В директории «wp-content/plugins/widgetattachments» создаем файл «widgetattachments.php» — это файл будет служить запускающим наш плагин. Далее вписываем всю необходимую информацию по плагину в части комментариев
/* Plugin Name: Attach Files Widget Plugin URI: http://wordpress.org/extend/plugins/attach-files-widget/ Description: Simple attachment widget that uses native WordPress upload thickbox to add files link widgets to your site. Version: 1.1 Author: Vyacheslav Volkov ([email protected]) Author URI: http://vexell.ru/ */
Далее следует установка директив
// Текущая директория $currentDir = dirname(__FILE__); define('WIDGET_ATTACHMENTS_DIR', $currentDir); // Версия плагина define('WIDGET_ATTACHMENTS_VERSION', '1.0'); // Название плагина $pluginName = plugin_basename(WIDGET_ATTACHMENTS_DIR); // URI путь до директории с плагином $pluginUrl = trailingslashit(WP_PLUGIN_URL . '/' . $pluginName); // Путь для CSS, JS скриптов и картинок $assetsUrl = $pluginUrl . '/assets';
Используем 2 хука WordPress которые происходят при его инициализации
// Вызываем функцию при инициализации админ панели add_action('admin_init', 'widget_attachment_admin_init'); // Вызываем функцию при инициализации виджетов add_action('widgets_init', 'widget_attachment_widgets_init');
Эти 2 хука вызывают нижеследующии функции
function widget_attachment_admin_init() { global $assetsUrl; load_plugin_textdomain( 'ex_attachments_widget'); // Регистрируем javascrpt для виджета в админпанели wp_register_script('widget_attachments_js', $assetsUrl . '/js/admin-scripts.js', array(), WIDGET_ATTACHMENTS_VERSION, true); // Регистрируем стили для виджета в админпанели wp_register_style('widget_attachments_css', $assetsUrl . '/css/admin-style.css', array(), WIDGET_ATTACHMENTS_VERSION); // Подключаем jquery wp_enqueue_script('jquery'); // 2 нижеследующих скрипта нужны для загрузки диалогового окна загрузки файлов wp_enqueue_script('media-upload'); wp_enqueue_script('thickbox'); // И подключаем все скрипты и стили wp_enqueue_script('widget_attachments_js'); wp_enqueue_style('widget_attachments_css'); wp_enqueue_style('thickbox'); } // Функция которая загружает класс с виджетом // и инициализирует его function widget_attachment_widgets_init() { include_once WIDGET_ATTACHMENTS_DIR . '/WidgetExAttachments.php'; register_widget( 'WidgetExAttachments' ); }
С помощью этого кода мы уже сделали подключение виджета, теперь перейдем непосредственно к структуре самого виджета который находится в файле «WidgetExAttachments.php».
Свой класс виджета мы наследуем от Базового класса WP_Widget.
class WidgetExAttachments extends WP_Widget {}
Для виджета нам необходимо реализовать 4 метода: инициализация, widget, form, update.
Начнем с первого. Инициализация — это конструктор класса. В WordPress необходимо создать метод с названием самого класса.
function WidgetExAttachments() { $widget_ops = array( 'classname' => 'widget_ex_attachments', // Класс который будет присваиваться виджету 'description' => __( 'Attach files in widget' ) // Описание виджета в админпанели ); // ID виджета и его название $this->WP_Widget( 'widget_ex_attachments', __( 'Attach Files' ), $widget_ops ); $this->alt_option_name = 'widget_ex_attachments'; /* Также для виджета используем кэширование. В моем примере это не так необходимо, но если у вас происходят какие-то вычисления в нем или сложные запросы в БД, то вам лучше использовать кэширование*/ add_action( 'save_post', array(&$this, 'flush_widget_cache' ) ); add_action( 'deleted_post', array(&$this, 'flush_widget_cache' ) ); add_action( 'switch_theme', array(&$this, 'flush_widget_cache' ) ); }
Методы update, form и widget я здесь описывать не буду — вы можете их посмотреть в файлах самого виджета. Я лишь опишу для чего они нужны.
Метод widget — вызывается когда происходит отрисовка виджета уже на клиенсткой части.
Метод form — вызывается когда мы в админпанели добавляем виджет. Он служит для редактирования данных которые мы будем показывать пользователям.
Метод update — вызывается когда мы сохраняем данные в админпанели.
Когда мы реализовали все эти методы-наш виджет готов. Теперь необходимо его опубликовать в репозитории. Для этого нам понадобится регистрация на wordpress.org а также SVN клиент.
Регистрация происходит как обычно. Никаких сложностей. Потом идем на страничку http://wordpress.org/extend/plugins/about/. Собственно тут можно и увидеть порядок действий и нужную справочную информацию.
К плагину необходимо приложить файл readme.txt в котором описывается вся необходимая по нему информация. Пример readme файла можно посмотреть по этому адресу http://wordpress.org/extend/plugins/about/readme.txt
Слева в меню можно увидеть раздел «Add Your Plugin«. Переходим по нему, вводим название плагина, описание и ссылку на архив плагина или уже рабочую версию. Я приложил ZIP архив с ссылкой на Dropbox. Примерно через сутки мой плагин прошел ревью и мне дали SVN доступ: http://plugins.svn.wordpress.org/attach-files-widget/.
Тот, кто знаком с SVN структурой папок, быстро разберется что к чему. Необходимо сделать checkout по этому адресу и добавить файлы плагина в папку trunk. В папку assets вы можете добавить скриншоты и баннер вашего плагина. Название файлов должно быть «banner-772×250.png» или «banner-772×250.jpg» для обычных мониторов, или «banner-1544×500.png», «banner-1544×500.jpg» для ретина дисплеев.
Скриншоты вшего плагина должны быть с именами «screenshot-1.png», «screenshot-2.png» и т.д. Можно использовать расширение jpg. Более детальную информацию можно прочитать вот по этому адресу http://wordpress.org/extend/plugins/about/faq/
После того, как мы закоммитим наш плагин, то он будет доступен для всех желающих.
Мой плагин доступен по ссылке http://wordpress.org/extend/plugins/attach-files-widget/. Скачав его, вы можете увидеть исходный код полностью.