必要な知識

ワードプレスのデータベースから一部のプラグインを無効化する方法

ワードプレスのデータベースから一部のプラグインを無効化する方法をワードプレスそのものの関数ではなくデータベースを直接いじって一覧を取得したり一部を無効化する方法を解説します。
ワードプレスのデータベースから一部のプラグインを無効化するには、そのデータの状態を知らなければいけないので、一覧の取得の仕方を説明したあと、その一覧のデータから一部のプラグインのデータを無効化します。

ワードプレスのプラグインの一覧をデータベースから取得する方法

ワードプレスのデータベースからプラグインの一覧をしょくとくするには、
有効化されているプラグインの一覧を取得します。

有効化されているプラグインの一覧は、(テーブルプレフィックス)+’options’ のテーブル内、active_plugins の中にあります。
一覧は、シリアライズされているので、アンシリアライズしてから使います。

次のソースは、アクティブプラグインからデータを抜き出してプラグインパス+’/’+プラグイン名を配列に取り込みます。


0001  global $table_prefix;
0002  global $wpdb;
0003  $db_name = DB_NAME;  //データベース名の取得
0004  $db_user = DB_USER;  //データベース接続ユーザーの取得
0005  $db_pass = DB_PASSWORD; //データベース接続用パスワードの取得
0006  $db_host = DB_HOST;  //データベースホストの取得
0007  $db_pfix = $table_prefix;  //データベースホストの取得
0008  
0009  $link = mysqli_connect($db_host, $db_user, $db_pass,$db_name);
0010  if (!$link) {
0011   return('');
0012  }
0013  $stack = array();
0014  // データ処理
0015
0016  $sql = "SELECT ";
0017  $sql.= "* ";
0018  $sql.= "FROM ";
0019  $sql.= $db_pfix."options ";
0020  $sql.= "WHERE ";
0021  $sql.= "option_name = 'active_plugins'";
0022  $sql.= ";";
0023  if( $rows = mysqli_query($link, $sql) ){
0024    foreach($rows as $row){
0025    $value = maybe_unserialize( $row['option_value'] );
0026    foreach($value as $val){
0027     $stack[] = $val;
0028    }
0029   }
0030  }
0031  mysqli_close($link);
0032  return($stack);

上記プログラムの $rows は、以下のようにシリアライズされたデータが入っています。
phpmyadmin でも確認できます。
[“option_value”]=> [“option_id”]=> string(2) “33”
[“option_name”]=> string(14) “active_plugins”
[“option_value”]=> string(322) “a:6:{i:0;s:57:”all-in-one-wp-migration-4g/all-in-one-wp-migration-4g.php”;i:1;s:33:”classic-editor/classic-editor.php”;i:2;s:35:”classic-widgets/classic-widgets.php”;i:3;s:41:”dashboardmemo_yuzu/dashboardmemo_yuzu.php”;i:4;s:39:”wp_migration_yuzu/wp_migration_yuzu.php”;i:5;s:39:”wp_uninstall_yuzu/wp_uninstall_yuzu.php”;}”
[“autoload”]=> string(3) “yes”

読みやすく展開するとこんな感じ
[“option_id”]=>”33″
[“option_name”]=>active_plugins”
[“option_value”]=>i:0;s:57:”all-in-one-wp-migration-4g/all-in-one-wp-migration-4g.php”;
i:1;s:33:”classic-editor/classic-editor.php”;
i:2;s:35:”classic-widgets/classic-widgets.php”;
i:3;s:41:”dashboardmemo_yuzu/dashboardmemo_yuzu.php”;
i:4;s:39:”wp_migration_yuzu/wp_migration_yuzu.php”;
i:5;s:39:”wp_uninstall_yuzu/wp_uninstall_yuzu.php”;
[“autoload”]=>”yes”

アクティブプラグインの名前(パス付)は、option_value の中にあります。
例では6つのアクティブ(有効化された)になってるプラグインが入っています。

ワードプレスのデータベースから一部のプラグインを無効化する

ワードプレスのデータベースから一部のプラグインを無効化するには、前述の active-pulugins の option-value を書き換えることで実現できます。
つまり、
[“option_value”]=>i:0;s:57:”all-in-one-wp-migration-4g/all-in-one-wp-migration-4g.php”;
i:1;s:33:”classic-editor/classic-editor.php”;
i:2;s:35:”classic-widgets/classic-widgets.php”;
i:3;s:41:”dashboardmemo_yuzu/dashboardmemo_yuzu.php”;
i:4;s:39:”wp_migration_yuzu/wp_migration_yuzu.php”;
i:5;s:39:”wp_uninstall_yuzu/wp_uninstall_yuzu.php”;
から、無効化したいプラグイン名を取り除くことで無効化できます。

例えば、上記の classic-widgets を無効化するには、i=2 の行を削除して順番号を書き直して書き込めばいい。
i:0;s:57:”all-in-one-wp-migration-4g/all-in-one-wp-migration-4g.php”;
i:1;s:33:”classic-editor/classic-editor.php”;
i:2;s:41:”dashboardmemo_yuzu/dashboardmemo_yuzu.php”;
i:3;s:39:”wp_migration_yuzu/wp_migration_yuzu.php”;
i:4;s:39:”wp_uninstall_yuzu/wp_uninstall_yuzu.php”;

アンシリアライズして配列にしておいて、ターゲットを検索し、配列から削除。
その後シリアライズしてテーブルに書き込むことでプラグインを無効化できます。

※シリアライズ:serialize(mixed $value): string
※案シリアライズ:unserialize(string $data, array $options = []): mixed

こんな感じで配列を作ってデータベースをアップデートすればいいということになります。
0001  $stack= array();
0002  if( $rows = mysqli_query($link, $sql) ){
0003    foreach($rows as $row){
0004    $value = maybe_unserialize( $row['option_value'] );
0005    foreach($value as $val){
0006     if($target==$val ){
0007     }else{
0008      $stack[] = $val;
0009     }
0010    }
0011   }
0012   $value = serialize($stack);
0013   // データベースへ書きだす
0014  }

ワードプレスのデータベースから一部のプラグインを無効化する方法まとめ

プラグインの有効か無効化は、シリアライズ、シリアライズがわかれば概ね完了です。
あとは、データベーステーブルからの読み出しと書き込みです。

プラグインは、有効化されているものだけをデータベースに記録しておいて、表示するとき wp-content/plugins の中を探してプラグインの一覧を作り、表示している最中に合致するプラグインを有効化されてますと表示してるんですね。

実際の使用は、active-plugins リストのプラグインの require_once で取り込むということですね。

この書き込みがあなたの一助になれば幸いです。

スポンサードリンク

関連記事一覧