PHP WordPress

WordPress MySQLのデータを操作

2022年2月8日

MySQLのデータの準備

  • テーブル名:wp_sample_table
  • データ
    id name
    1 佐藤 大輔
    2 高橋 直樹
    3 中村 健一

MySQLのデータを表示する

global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM wp_options WHERE option_id = 1", OBJECT );

出典:関数リファレンス/wpdb Class

結果

var_dumpで実行するとwp_optionsのoption_idが1のデータが表示されます。

自作のテーブルを登録する

自作のテーブルを使用したい場合、ただテーブル名を書いても表示されません。

なので、使用したいテーブルを登録する必要があります。

wp-db.phpに登録する

/wp-includes/wp-db.php

wp-db.phpの$tablesにテーブル名を追加します

wp-db.phpに直接記述してしまうとWordPressを更新した際、wp-db.phpに記述したものがすべて消えてしまう場合があります

なので次のように「db.php」を作成し、テーブル名を記述します

db.phpに登録する

wp-content/db.php

wp-content配下にdb.phpを作成します

db.phpの$tablesにテーブル名を追加します

今回は「sample_table」を追加します

require_once(ABSPATH.WPINC.'/wp-db.php');

class my_wpdb extends wpdb {
    public $tables = array(
        'posts',
        'comments',
        'links',
        'options',
        'postmeta',
        'terms',
        'term_taxonomy',
        'term_relationships',
        'termmeta',
        'commentmeta',
        'sample_table',
    );
}

if( !isset($wpdb) ) {
    $wpdb = new my_wpdb( DB_USER, DB_PASSWORD, DB_NAME, DB_HOST );
}

参考URL:ワードプレスに独自テーブルを追加するなどもをかし。

自作のテーブルを表示する

global $wpdb;
$results = $wpdb->get_results( "SELECT * FROM ". $wpdb->sample_table);

結果

var_dumpで実行するとwp_sample_tableのデータが表示されます。

array(3) {
[0]=> object(stdClass)#5640 (2) { ["id"]=> string(1) "1" ["name"]=> string(13) "佐藤 大輔" }
[1]=> object(stdClass)#5641 (2) { ["id"]=> string(1) "2" ["name"]=> string(13) "高橋 直樹" }
[2]=> object(stdClass)#5642 (2) { ["id"]=> string(1) "3" ["name"]=> string(13) "中村 健一" }
}

多次元配列を JSON 形式にして扱いやすくする

var_dumpで出力したデータは多次元配列になっているため、PHPで表示しようとするとうまくいきませんでした。

なので、以下のようにしてデータを表示しました。

global $wpdb;
$results = $wpdb->get_results( 'SELECT * FROM '. $wpdb->sample_table);
$json = json_encode( $results );
$decoded_data = json_decode( $json, true );

array(3) {
[0]=> array(2) { ["id"]=> string(1) "1" ["name"]=> string(13) "佐藤 大輔" }
[1]=> array(2) { ["id"]=> string(1) "2" ["name"]=> string(13) "高橋 直樹" }
[2]=> array(2) { ["id"]=> string(1) "3" ["name"]=> string(13) "中村 健一" }
}

そして、配列の中の「佐藤 大輔」を出力します。

print($decoded_data[0]["name"]); 

佐藤 大輔

無事に「佐藤 大輔」が出力出来ました。

参考URL:php 多次元配列になったstdClassをArrayにキャストする

テーブル名に変数を使用する

global $wpdb;
$table_name = "sample_table";
$results = $wpdb->get_results( "SELECT * FROM ". $wpdb->prefix.$table_name);

出典:関数リファレンス/wpdb Class

prepareメソッドを使用する

global $wpdb;
$query  = "SELECT * FROM $wpdb->sample_table WHERE id = %s";
$results = $wpdb->get_results( $wpdb->prepare( $query, 1));
global $wpdb;
$query  = "SELECT * FROM $wpdb->sample_table WHERE name = %s";
$results = $wpdb->get_results( $wpdb->prepare( $query, "佐藤 大輔"));

文字列・・・・・・%s
数字・・・・・・・%d
浮動小数点数・・・%f

出典:関数リファレンス/wpdb Class

-PHP, WordPress