Создание плагина для Wordpress. Часть 1: каркас и первая таблица
В сети есть немало инструкций по созданию плагинов для вордпресс, но подавляющее большинство из них останавливаются на «хелло ворлд» - то есть минимальный функционал. А если нам требуется активное взаимодействие с базой данных? Да еще через AJAX? Тут есть немало тонкостей.
Так что давайте сами напишем небольшое руководство по созданию плагина для вордпресс – от а до я. Плагин будет в процессе меняться, но общая задумка такая: создадим таск-менеджер для личного пользования. То есть можно ставить себе задачи, помечать их выполенными, редактировать и удалять. В процесс близко познакомимся с программированием на PHP и JS, а также будем изучать внутренности CMS Wordpress.
Итак, для начала структура. Назовем плагин taskmanager, предварительно создаем вот такой набор файлов и папок:
Выглядит громоздко, но пугаться не стоит – тут все как надо, практически все потребуется, затронем постепенно все стороны. В файлах кода мало, в основном стоят заглушки. Скачать архив со всеми файлами можно отсюда.
Самый главный файл тут – это, как ни странно, не index.php, а taskmanager.php. Его код
<?php /** * The plugin bootstrap file * * This file is read by WordPress to generate the plugin information in the plugin * admin area. This file also includes all of the dependencies used by the plugin, * registers the activation and deactivation functions, and defines a function * that starts the plugin. * * @since 1.0.0 * @package TaskManager * * @wordpress-plugin * Plugin Name: TaskManager * Plugin URI: https://upread.ru/ * Description: TaskManager * Version: 1.0.0 * Author: up7 * Author URI: https://upread.ru/ * License: GPL-2.0+ * License URI: http://www.gnu.org/licenses/gpl-2.0.txt * Text Domain: taskmanager * Domain Path: /languages */ // If this file is called directly, abort. if ( ! defined( 'WPINC' ) ) { die; } /** * Currently plugin version. * Start at version 1.0.0 and use SemVer - https://semver.org * Update it as you release new versions. */ define( 'TASKMANAGER_VERSION', '1.0.0' ); /** * The code that runs during plugin activation. * This action is documented in includes/class-taskmanager-activator.php */ function activate_taskmanager() { require_once plugin_dir_path( __FILE__ ) . 'includes/class-taskmanager-activator.php'; TaskManager_Activator::activate(); } /** * The code that runs during plugin deactivation. * This action is documented in includes/class-taskmanager-deactivator.php */ function deactivate_taskmanager() { require_once plugin_dir_path( __FILE__ ) . 'includes/class-taskmanager-deactivator.php'; TaskManager_Deactivator::deactivate(); } register_activation_hook( __FILE__, 'activate_taskmanager' ); register_deactivation_hook( __FILE__, 'deactivate_taskmanager' ); /** * The core plugin class that is used to define internationalization, * admin-specific hooks, and public-facing site hooks. */ require plugin_dir_path( __FILE__ ) . 'includes/class-taskmanager.php'; /** * Begins execution of the plugin. * * Since everything within the plugin is registered via hooks, * then kicking off the plugin from this point in the file does * not affect the page life cycle. * * @since 1.0.0 */ function run_taskmanager() { $plugin = new TaskManager(); $plugin->run(); } run_taskmanager();Тут все должно быть понятно: просто подключаем и инициализируем. Единственно бращу внимание, что комментарии вверху – название там плагина – они обязательны – без этого вордпресс его просто не подключит.
Давайте сегодня посмотрим еще на один файл includes/class-taskmanager-activator.php
<?php /** * Fired during plugin activation * * @since 1.0.0 * * @package TaskManager * @subpackage TaskManager/includes */ /** * Fired during plugin activation. * * This class defines all code necessary to run during the plugin's activation. * * @since 1.0.0 * @package TaskManager * @subpackage TaskManager/includes * @author up7 */ class TaskManager_Activator { /** * Short Description. (use period) * * Long Description. * * @since 1.0.0 */ public static function activate() { } }Именно здесь, как можно догадаться из названия, необходимо располагать методы при наступлении события активации плагина. Разумно будет сюда поместить создание таблицы с задачами – должны же они где-то храниться, верно?
Добавляем функцию, можно статическую, нужна она всего один раз
public static function create_table(){ global $wpdb; $charset_collate = $wpdb->get_charset_collate(); $tablename = $wpdb->prefix . "tasks"; $sql = "CREATE TABLE $tablename ( id int(11) NOT NULL AUTO_INCREMENT, dat datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, name varchar(255) NOT NULL, description text NOT NULL DEFAULT '', is_done int(1) NOT NULL DEFAULT '0', PRIMARY KEY (id) ) $charset_collate;"; require_once(ABSPATH . 'wp-admin/includes/upgrade.php'); dbDelta($sql); }И вызов её
public static function activate() { TaskManager_Activator::create_table(); }Теперь после того, как вы зальете файлы на хостинг в ваш вордпресс в директорию с плагинами, то у вас появится что-то типа такого
А после активации должна в базе данных создаться новая табличка с названием wp_tasks.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.