【WordPress】プラグインAPIを使用して「有効化・無効化・アンインストール」時の処理を定義する

WordPress管理画面で、各プラグインの有効化や無効化のタイミングで任意の処理を実行できるようにします。

想定される利用場面は……

  • 有効化でデータベースのテーブル作成
  • 無効化でデータ削除
  • アンインストールでテーブル含め関連データをデータベースから全消去

などです。なお、SQLによるデータベース操作は以前にまとめています。

環境
PHP
7.4.28
WordPress
5.9.3

ディレクトリ構成

wp-content/以下の構成は下記となります。

plugins/
`-- test-plugin/
    |-- test-plugin.php
    `-- uninstall.php

コード

test-plugin.php

有効化、無効化のタイミングでの処理を定義します。
以下のコードは無名クラスを即時実行しています。PHPのバージョンが7以上でなければ動きません。

<?php
/**
 * Plugin Name: Test Plugin
 * Version:     1.0
 * Description: プラグインのテスト
 */

// 直アクセス防止
if ( ! defined( 'ABSPATH' ) ) {
	die( 'Invalid request.' );
}

(new class {

    public function __construct()
    {
        // 有効化で実行
        register_activation_hook(__FILE__, [$this, 'activation']);

        // 無効化で実行
        register_deactivation_hook(__FILE__, [$this, 'deactivation']);
    }

    public function activation()
    {
        global $wpdb;

        $wpdb->query(
            "
            CREATE TABLE IF NOT EXISTS test_table (
                ID   INT(11) UNSIGNED AUTO_INCREMENT NOT NULL,
                name CHAR(255) NOT NULL,
                age  TINYINT UNSIGNED DEFAULT 1,
                memo TEXT,
                flag BOOLEAN,
                PRIMARY KEY (ID),
                INDEX id_index(name)
            );
            "
        );
    }

    public function deactivation()
    {
        // delete_option('...');
    }
});

uninstall.php

アンインストールのタイミングで実行されます。

<?php

// 直アクセス防止
// WP_UNINSTALL_PLUGINの定義をチェック
if (!defined('WP_UNINSTALL_PLUGIN')) {
    die;
}

global $wpdb;
        
$wpdb->query(
    "
    DROP TABLE IF EXISTS test_table
    "
);

おわりに

以上で任意のタイミングで処理が可能となりました。今回はクラスを使用したコードを書きましたが、関数でも可能です。