WordPressで特定のテーブルがデータベース内にあるかどうかを判別して条件分岐させる方法

WordPressをインストールしているデータベース内に独自のテーブル作って、WordPressの管理画面内にある投稿の編集画面からそのテーブルに対してデータを追加・編集・削除をさせたい、という事は僕はよくあります。

その場合「データベース内にテーブルがあるかどうか」をまずは判別して、条件分岐させて処理を変えたいなと思いました。

以下にその方法を書きましたので、似たようなことをされたい方はご参考ください。

その前に、知っておくと役に立つデータベース名の定義

WordPressをインストールしたときに作られる「wp-config.php」ファイル内に、以下の記述があります。

/** WordPress のためのデータベース名 */
define('DB_NAME', 'mydb');

上の記述では「mydb」というデータベース名が定義されています。これを利用しましょう。

WordPressのインストールされたデータベース内に特定のテーブルがあるかどうか判別する方法

例えば下のような感じで「SHOW TABLES」を使ってSQL文を書いて判別します。

テーブルがあるかどうか判別

<?php
global $wpdb; //グローバル変数「$wpdb」を使うよっていう記述
$table_search = $wpdb->get_row("SHOW TABLES FROM " . DB_NAME . " LIKE '" . $wpdb->posts . "'"); //「$wpdb->posts」テーブルがあるかどうか探す
if( $wpdb->num_rows == 1 ){ //結果を判別して条件分岐
 //テーブルがある場合の処理
 echo 'テーブルあるよ';
} else {
 //テーブルがない場合の処理
 echo 'テーブルないよ';
}
?>

出力結果

テーブルあるよ

コードがやっていること

「$wpdb->posts」はWordPressをインストールした直後にデフォルトで作られるテーブルの1つとして、投稿に関するテーブル名が格納されています。特別な事をしていない限りはテーブルは存在していると思います。

「$wpdb->num_rows」は直近の$wpdbクエリの結果の行数を取得できるので、定義済みのデータベース名「mydb」から、テーブルが存在していれば「1つ見つかったよ」という意味で「1」が取得できます。

この値を利用して、取得した行数で条件分岐をして、テーブルがある場合とない場合で処理を分けている、という感じです。

この方法は、例えば「記事別投票データ」「人気記事データ」「ソーシャルカウント数データ」などを独自のテーブルに保存するようなWordPressプラグインがあったとして、まずはテーブルがあるかどうかを判別して、テーブルがない場合は新しく作る、みたいなときにも使えるので便利だなぁと思います。

著者:bouya Imamura