wordpress 独自データベースに保存したデータをページ内に表示してみる

前回までに作ったMySQLテーブルのデータを固定ページに表示

前回までは

404 NOT FOUND | Beヨンド
ガジェット レビュー・ランキング

、それと

404 NOT FOUND | Beヨンド
ガジェット レビュー・ランキング

をやりました。

今回は、ショートコードを使ってオリジナルのMySQLテーブルからデータを取得してテーブルに流し込んで表を表示してみます。

最終的にやりたいこと、wordpressの固定ページで「MVNO 比較」ページを作ってみます。

これで、比較表をいちいち変更がある度にページ全部を手動で変更しなくてもMySQLテーブルのデータを変更すれば自動的に全ページが変更されるようになります。

function.phpにショートコードの設置

今回は前回よりシンプルにしてみました。get_template_partでインクルードする引数は第2引数は使わないので省略してます。

すべての引数を$original_arrayに入れてインクルードしたファイルから$original_arrayが使えるようにグローバル化します。($original_arrayはインクルードするファイルもグローバル化しないと認識されないようです。)

function.phpの場所は「public_html/wp-content/themes/テーマ名/function.php」にあります。

function include_php_shortcode($atts) {
    global $original_array;
    ob_start();
    $original_array=$atts;
    get_template_part($original_array['slug']);
    return ob_get_clean();
}
add_shortcode("include_php", "include_php_shortcode");

これで引数やファイル名に影響されず自由なPHPファイルをインクルードできるようになりました。

$original_array 連想配列を作る

wordpress記事本文中に入れるショートコードは、インクルードするファイル名の指定以外に2番目の引数からはMySQLテーブルからデータを取り出すための引数を記入していきます。

[[include_php slug=”includes/original_table” cate1=”カテゴリー1″ cate2=”カテゴリー2″ cate3=”カテゴリー3″ name=”商品名” type1=”仕様タイプ1″ type2=”仕様タイプ2″ type3=”仕様タイプ3″ contensts=”商品詳細” price=”価格”]]

というような引数を入れたショートコードを作ります。実際はすべての引数を記入する必要なく、必要な引数だけ入れるようにします。

wordpressで表を使うため独自データベース テーブルを作成してデータ整形する

ここで2つめの配列からwp_originalというMySQLテーブルを作った各フィールドと同じ配列の名前にすることによってクエリーを生成しやすくします。

$original_array=array(
        "slug" => 'includes/ファイル名',//インクルードで使用
        "cate1" => 'カテゴリー1', //cate1,cate2,cate3をデータごとに分類しておいて
        "cate2" => 'カテゴリー2', //ショートコードでデータを呼び出すときはこの
        "cate3" => 'カテゴリー3', //3つのcateを指定して呼び出す。
        "name" => "商品名",
        "type1" => "仕様タイプ1",
        "type2" => "仕様タイプ2",
        "type3" => "仕様タイプ3",
        "contents" => "商品詳細",
        "price" => "価格"
);

$original_arrayは通常は4つの引数でnameから下は通常は使わない想定ですが、必要であればあいまい検索するようにします。

クエリーを生成するoriginal_table.phpを作成する。

サンプルとしてoriginal_table.phpというファイルを作ってincludesディレクトリにアップロードして、これをショートコードから呼び出すようにします。

<?php
global $wpdb,$original_array;//グローバル化しないと使えない

//cate以外は曖昧検索(あまり使わない)
foreach($original_array as $key => $value) {
    $value = strip_tags( $value ); //htmlタグを除去
    if ( $key == 'slug') continue; //slugはインクルードの引数なのでパスする。
    if ( $query != "") $query .= " AND "; //複数の引数指定がある場合
    if ( $value != "") {
        if ( strpos( $key, "cate" ) !==false ) {
            $query .= $key . '=' . '"' . $value .'"';
        } else {
            $query .= $key . ' LIKE ' . '"%' . $value .'%"';
        }
    }
}
$query .= " ORDER BY price";//価格が安い順

//$wpdb->show_errors(); //デバッグ
if ( $query != "" ) {
    $rows = $wpdb->get_results("SELECT * FROM wp_original WHERE " . $query);
    if($rows){
        foreach ($rows as $value2) {
            $table_tag .="<tr>";
            $table_tag .="<th>" . $value2->name . "</th>\n";
            $table_tag .="<td>" . $value2->type1 . "</td>";
            if ( $original_array[ "cate3" ] == "museigen" ) $table_tag .="<td>" . $value2->type2 . "</td>";
            if ( $value2->type3 != "" ) $table_tag .="<td>" . $value2->type3 . "</td>";
            $table_tag .="<td>" . $value2->contents . "</td>";
            $table_tag .="<td>" . number_format($value2->price) . "円</td>";
            $table_tag .="</tr>";
        }
    }
}
if ( $original_array[ "cate3" ] == "museigen" ) $museigen = "<th>速度</th>";
$original_table = <<<EOD
<table width="100%">
<tbody>
<tr>
<th>MVNO各社</th>
<th>容量</th>
$museigen
<th>プラン/コース</th>
<th>料金(税抜き)</th>
</tr>
$table_tag
</tbody>
</table>
EOD;

echo $original_table;
?>

このような簡単なPHPファイルを作ってアップロードしました。

試しにoriginal_table.phpをインクルードしてみます。

ショートコードは以下のように、試しにやってみます。

[[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”museigen”]]

「MVNOの比較」で「音声付きSIM」、「データ通信容量無制限」プランの比較表を出力してみます。

[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”museigen”]

こちらのページが手動で作った「音声付きSIMでデータ通信容量無制限」プランの比較表です。

順番が違うのと、「該当なし」のデータは無いので表示されない以外は同じように表示されていると思います。(手動で作ったページはデータを更新してないので古いデータの場合があります。)

固定ページでMVNO比較ページを作成して比較表を出力してみる

最終段階としていよいよデータを実際に使ってみます。

MVNO(格安SIM)音声通話+データ通信 1GB前後 料金比較

[[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”1gb”]]

MVNO(格安SIM)音声通話+データ通信 3GB前後 料金比較

[[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”3gb”]]

MVNO(格安SIM)音声通話+データ通信 5GB前後 料金比較

[[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”5gb”]]

MVNO(格安SIM)音声通話+データ通信 10GB前後 料金比較

[[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”10gb”]]

MVNO(格安SIM)音声通話+データ通信 無制限 料金比較

[[include_php slug=”includes/original_table” cate1=”MVNO” cate2=”onsei” cate3=”museigen”]]

こんな風に料金比較表のページを作ってみました。

できたページがこちら。同様にデータ通信のみのプランも比較してみます。

ショートコードで簡単に比較表を呼び出せるようになりました。

これで手動でテーブルを作る必要なくデータ編集に集中できます!ショートコード便利。

コメント

タイトルとURLをコピーしました