WordPressに自作テーブルにデータをぶち込んで利用したいと思ったので、検索してみたらやり方が載っていたので、実際にやってみました。
##手順の概要
####1.テーブル作成
####2.wp-db.phpを編集
####3.追加テーブルのデータ取得
##まえがき
##テーブル作成
DB:_wp104
###操作
テーブル名は他のテーブルを真似て頭にwpbkを付けます。
###表示
##wp-db.phpを編集
wp-db.phpはwp-includesフォルダ内にあります
###Wordpressがバージョンアップされると、wp-db.phpは書き換わるので要注意!!!
テーブル名が定義してある箇所がありますので、そこに追加するテーブル名[products]を記載します
var $tables = array( 'posts', 'comments', 'links', 'options', 'postmeta',
'terms', 'term_taxonomy', 'term_relationships', 'termmeta', 'commentmeta','products' );
###db.php を使って対応する方法
db.phpを作るとwp-db.phpが書き換わってもちゃんと接続できるようになっています。
wp-content>db.php
[参考]https://yululy.com/wpdb_database_include/
##追加テーブルのデータ取得
データベースに追加したproductsテーブルを参照するためには、ショートコードを利用します。
ショートコードは、fucntions.phpの最後に以下のように記載します
####注意点
echoを使って出力するのですが、そのまま利用すると思った位置に表示してくれません。それを回避するために、ob_start();とreturn ob_get_clean();の間にechoを持ってきて出力位置を安定させます。
ob_start();
foreach($get_data as $data) {
echo '<p>[' .$data->name . ']</p>';
}
return ob_get_clean();
###実際のコード
function shortcode_test(){
global $wpdb;
$get_data = $wpdb->get_results("SELECT * FROM $wpdb->products ");
ob_start();
foreach($get_data as $data) {
echo '<p>[' .$data->name . ']</p>';
}
return ob_get_clean();
}
add_shortcode('sc_test', 'shortcode_test');
###投稿記事の好きな場所から呼び出します
[sc_test]
##CSVファイルをインポートする
###照合順序を「utf8_general_ci」に変更する
テーブルの構造はコピーできる
phpmyadminの操作タブから可能!
##Ninja Tablesプラグインを使ったテーブル設計
独自でテーブルを作成していましたが、状況によってはNinja Tableプラグインを使うと楽な場合があります。
ninja_table_items というテーブル名でデータベースに保存されています。
ninja_tableで作成したテーブルのフィールドや値はすれべvalueという項目内に配列のようにして格納されています。
### 【参考】ninja tableからデータを取出してみた
function get_nintbl($atts){
//------ninjaテーブルを使った値の呼び出し方-------------
//プレフィックスを設定してください
//記事の中からショートコードで呼び出す
//ショートコード[nintbl table番号 条件項目 条件項目の値 取得フィールド]
//例えば、tabel番号が92でid=1のレコードのprice項目の値を取得する場合 [nintbl 92 id 1 price]
//注1 複数レコードが該当するような条件は利用できない
//注2 部分検索を利用している似たような項目名を付けない(price_max,price_min)
global $wpdb;
//プレフィックス(データベースのテーブル名の頭の文字列)を設定する
$prefix="wpyd";
//$prepared_sql = $wpdb->prepare("SELECT *FROM $wpdb->ninja_table_items WHERE table_id = %d",$atts[0]);
$prepare_sql = $wpdb->prepare("SELECT * FROM ".$prefix."_ninja_table_items WHERE table_id = %d",$atts[0]);
$results=$wpdb->get_results($prepare_sql);
//echo count($results);
$replace = [
// '置換前の文字' => '置換後の文字',
'[' => '',
'{' => '',
'}' => '',
']' => '',
'"' => '',
];
//var_dump($results);
foreach($results as $data) {
//[{"id":"1","career":"docomo","ols":"ドコモオンライン","price":"10000"}]
// カンマ区切りのデータを分割
$str_data=str_replace(array_keys($replace), array_values($replace), $data->value);
$arry_data = explode(",", $str_data);
//var_dump($arry_data);
$match = preg_grep('!'.$atts[1].':'.$atts[2].'!',$arry_data);
if(count($match)>0){
$value = preg_grep('!'.$atts[3].'!',$arry_data);
foreach($value as $val){
return str_replace($atts[3].":","",$val);
};
}
}
}
add_shortcode('nintbl','get_nintbl');
####記事からショートで呼び出す
[nintbl 92 id 1 price]