WordPress投稿欄に一覧表を表示する PART2【外部データベース編】

WordPress投稿欄に一覧表を表示する【外部データベース編】

この記事は自分の投稿欄に、別のデータベースやサービスからのデータを一覧表示したい。どうしたらいいの?に答えます。

コーディングはよく分からないけど、コピペはできる!という人にはおすすめです!

どうやってやるの?

今回は外部データベースを呼び出し、「ショートコード」を作成し投稿欄に張り付けます。

サンプルソースをテーマのfunction.php内にコピペして修正をします。

※前回WebAPIを採用していますが、シンプルにDBへ接続して表示することも可能です。

MySQLの使い方を習得した人であれば、別システム等のデータベース内容を自由にWordPress内に表示させることができます。

WordPress投稿欄に一覧表を表示する【外部データベース編】-概念図

ショートコードは、function.phpに記入したプログラムを投稿欄などで呼び出す機能です。セキュリティ上難しい機能をカスタマイズすることができます。

サンプルソース

今回はショートコード呼び出し時に、データベース名取得したい表のSQL文を指定します。

コードは3部構成になっており、DB接続、列タイトル、行内容の設定構成です。

※$wpdbのプロパティ【WordPressホストサーバ情報】を使用していますが、別サーバにも設定可能

function call_db($atts) {
	extract(shortcode_atts(array( 'dbname'=>"", 'sql'=>""),$atts)); 
	
        global $wpdb;
	$db_user = $wpdb->dbuser; //データベース接続ユーザーの取得
	$db_passwd = $wpdb->dbpassword; //データベース接続用パスワードの取得
	$db_host = $wpdb->dbhost; //データベースホストの取得
	$another_wpdb = new wpdb($db_user, $db_passwd, $dbname, $db_host);
	
	//DB接続
 	$rows = $another_wpdb->get_results($sql);
	$wdb ='<table><thead><tr>';

	//カラム名をTABLEタグタイトルに変更
	$columns = [];
	$keys = get_object_vars($rows[0]);
	foreach($keys as $key=>$value) {
		$columns[] = $key;
		$wdb .='<th>'.$key.'</th>';
	}
	$wdb .='</tr></thead><tbody>';
	
	//TABLEタグに取得行を追加
	foreach($rows as $row){
		$wdb .='<tr>';
		foreach($columns as $column){
			$wdb .='<td>'.$row->$column.'</td>';	
		}
		$wdb .='</tr>';
	}
	$wdb .='</tbody></table>';
    return $wdb;
}  
add_shortcode("wdb", "call_db");  

使用方法

投稿記事の任意の場所にショートコードを記入します。
[wdb dbname=”データベース名” sql=”表示したいSQL文“]]
※[]は半角で使ってください

尚、表示したいSQL文を加工すれば特に変更なしでそのまま利用できます。

デモ

デモとして、下記のようなDBをテスト用に配置してあります。

データベース仕様

別データベースは下記仕様で作成する。
今回は同一サーバ(ホスト先)で運用しているのをイメージする。

※ホスト先は別サーバでも可能(セキュリティは別途検討下さい。)

  • ホスト先サーバ:WordPressと同一
  • データベース:ssit_test【WordPress用とは別】
  • デモテーブル:pref【県名一覧テーブル】

WordPress投稿欄に一覧表を表示する【外部データベース編】-MySqlAdminイメージ図

実行結果

[wdb dbname=”ssit_test” sql=”SELECT * FROM pref WHERE area_name=’中部'”]

pref_idpref_namecapital_namearea_name
16富山県富山市中部
17石川県金沢市中部
18福井県福井市中部
21岐阜県岐阜市中部
22静岡県静岡市中部
23愛知県名古屋市中部
24三重県津市中部

※aタグを組み合わせれば表からリンクをすることもできます。

実行結果2

SQL文でカラム名を指定すれば日本語表記も可能です。

[wdb dbname=”ssit_test” sql=”SELECT pref_id AS 県ID, pref_name AS 県名, capital_name AS 県庁所在地, area_name AS 地域名 FROM pref WHERE area_name=’中部'”]

県ID県名県庁所在地地域名
16富山県富山市中部
17石川県金沢市中部
18福井県福井市中部
21岐阜県岐阜市中部
22静岡県静岡市中部
23愛知県名古屋市中部
24三重県津市中部

WebAPIのデータを表示したい!という人はこちらの記事

WordPress投稿欄に一覧表を表示する【WebAPI編】
WordPress投稿欄に別システムで使用しているデータの一覧表を表示するはどうしたらいいの?今回は別WebAPIで提供されているデータを投稿欄に表示する方法を紹介!
READ MORE..

まとめ

WordPressは使い勝手が良いですが、セキュリティの関係上プログラミングなどの要素はカプセル化されています。

PHPでのデータベース接続は通常PDOオブジェクトを使用しますが、設計思想の関係からwpdbオブジェクトを使用します。

プラグインやテーマそのものはハードルが高いなという人にもおすすめです。

とりあえず他のシステムのデータを表示したいという人にはオススメです。

Follow me!