スポンサーリンク
ブログ

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

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

千ちゃん
千ちゃん
自分の投稿欄に、別のデータベースやサービスからのデータを一覧表示したい。どうしたらいいの?
シンさん
シンさん
今回は「ショートコード」の機能を使ってできる方法を解説するよ!

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

どうやってやるの?

今回は外部データベースを呼び出す「ショートコード」を作成し、投稿欄に張り付けます。
サンプルソースをテーマのfunction.php内にコピペして修正をします。

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

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

サンプルソース

今回はショートコード呼び出し時に、データベース名取得したい表の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_id pref_name capital_name area_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編】 コーディングはよく分からないけど、コピペはできる!という人にはおすすめです! どうやってやるの? 今回はWebAPI...

まとめ

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

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

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

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