Создание плагина для 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты