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

тегизаметки, wordpress, php, плагин




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 10. Операторы побитового сдвига C#
Урок 13. Индексаторы C#
Фейковый счетчик на php