ワードプレスにはデータベースに認証した状態ですぐにSQLを実行できる便利なグローバル変数$wpdbというものがあります。
今回はこの$wpdbを利用してMYSQL文を発行する技をいくつかご紹介したいと思います。


ワードプレスの$wpdbでSELECTの結果を展開する

ワードプレスの$wpdbを利用してMYSQLのSELECT FROM文を発行し、取得したデータを展開します。
コードは下記のようになります。

global $wpdb;
$rows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts WHERE post_content LIKE '%あ%'");
foreach ($rows as $row)
{
echo $row->id."<br>";
}

このコードは投稿に「あ」を含む投稿idをすべて出力する例です。

結果をOBJECTではなく、連想配列で取得するには下記のようにします。

global $wpdb;
$rows = $wpdb->get_results("SELECT * FROM ".$wpdb->prefix."posts WHERE post_content LIKE '%あ%'", ARRAY_N);
foreach ($rows as $row)
{
echo $row['id']."<br>";
}

ワードプレスの$wpdbでSELECTの結果の数を取得する

下記のようなコードで上記の結果数を取得できます。

$number = count($rows);

また、SQL文を下記のようにすることでも数を取得できます

global $wpdb;
$number = $wpdb->get_results("SELECT COUNT(ID) FROM ".$wpdb->prefix."posts WHERE post_content LIKE '%あ%'");

$wpdbでテーブルをCREATEする

global $wpdb;
$tableName = "mytable"; //テーブル名を指定
$createsql = "CREATE TABLE " . $wpdb->prefix . $tableName . " (
    id int(11) unsigned  PRIMARY KEY  AUTO_INCREMENT,
    data varchar(1028)
    ) " . $wpdb->get_charset_collate() . ";";
dbDelta($createsql);

$wpdbでデータを削除する

$wpdb->queryでDELETE FROM を発行してもよいですし

$wpdb->query("DELETE FROM ".$wpdb->prefix."posts WHERE ID = 1");

下記のようにdelete関数を利用することも可能です。

$wpdb->delete( $wpdb->posts, array( 'ID' => 1) );

$wpdbでSQLをエスケープしつつINSERTする

global $wpdb;
$tablename = "mytable";
$id = 1;
$name = "aaa";
$sql = $wpdb->prepare( "INSERT INTO ".$wpdb->prefix.$tablename." (id, name) VALUES (%d , %s)" , $id , $name);
$wpdb->query($sql);

$wpdbでUPDATEする

$result = $wpdb->query("UPDATE ".$wpdb->prefix."posts SET post_content='aaaaa' WHERE ID=1");

$resultには影響を受けた行の有無が入ります。

上記のコードは下記と同じ意味になります。

$result = $wpdb->update( $wpdb->posts, array( 'post_content' => 'aaaa' ),array( 'ID' => 1 ));

$result にはアップデートされた行の数が入ります。

WordPress ワードプレスのカスタマイズ・エラーの修正、復旧、移行などのご相談ご依頼はWPドクターまでお気軽にお送りくださいませ