WordPressで外部のデータベースに接続する方法を紹介します。
架空の注文履歴を別のデータベースで作成して、WordPressからそのデータを取得します。
デモページはこちら。
外部のデータベースの構造
サンプルで用意したデータベースの構造は以下の通りです。
usersテーブル
ID | ユーザーID |
name | ユーザー名 |
productsテーブル
ID | 商品ID |
name | 商品名 |
price | 商品単価 |
ordersテーブル
ID | 注文ID |
user_id | ユーザーID |
product_id | 商品ID |
price | 商品単価 |
quantity | 注文数 |
date | 注文日 |
データベースへの接続
WordPressで外部のデータベースに接続するには、wpdbクラスを使います。
インスタンスを生成して、get_resultsメソッドにSQLを渡しましょう。
$mydb = new wpdb(
'dbuser', // ユーザー名
'dbpassword', // パスワード
'dbname', // データベース名
'dbhost' // ホスト名
);
$sql = '
SELECT
orders.id AS id,
users.name AS user_name,
products.name AS product_name,
orders.quantity AS quantity,
orders.price AS price,
orders.date AS date
FROM
orders
LEFT JOIN
users ON orders.user_id = users.id
LEFT JOIN
products ON orders.product_id = products.id
ORDER BY
orders.date ASC
';
$results = $mydb->get_results($sql);
戻り値をダンプすると、オブジェクトの配列が確認できます。
array(5) {
[0]=>
object(stdClass)#7698 (6) {
["id"]=>
string(1) "1"
["user_name"]=>
string(12) "山田太郎"
["product_name"]=>
string(9) "バナナ"
["quantity"]=>
string(1) "2"
["price"]=>
string(2) "80"
["date"]=>
string(19) "2023-09-24 13:02:51"
}
[1]=>
object(stdClass)#7697 (6) {
["id"]=>
string(1) "2"
["user_name"]=>
string(12) "鈴木花子"
["product_name"]=>
string(9) "りんご"
["quantity"]=>
string(1) "5"
["price"]=>
string(3) "100"
["date"]=>
string(19) "2023-09-30 16:36:14"
}
/* 中略 */
}
テンプレートを作成して実装完了です。
<table>
<tr>
<th>ID</th>
<th>名前</th>
<th>商品名</th>
<th>個数</th>
<th>単価</th>
<th>価格</th>
<th>注文日</th>
</tr>
<?php
foreach ( $results as $result ) :
?>
<tr>
<td><?php echo $result->id; ?></td>
<td><?php echo $result->user_name; ?></td>
<td><?php echo $result->product_name; ?></td>
<td><?php echo $result->quantity; ?></td>
<td><?php echo $result->price; ?></td>
<td><?php echo $result->quantity * $result->price; ?></td>
<td><?php echo $result->date; ?></td>
</tr>
<?php
endforeach;
?>
</table>
コメント