wordpressのデータベース(mySQL)に独自テーブルを作りデータを取り出す方法まとめ

wordpress_mysql

WordPressのMySQLデータベースに独自テーブルを追加して、そのデータをwordpressのテンプレートやそれ以外のテンプレートで使うためのPHPコードの覚書です。

例:wp_testtableを作った場合(接頭辞は他のテーブルと合わせるwp_)

global $wpdb を使ってデータを取り出す方法

// WordPressのテーマ外のテンプレートを使用するときwp-load.phpを読み込めばWordpressのほとんどの関数が使えるようになる(テーマ内では必要なし)
include ‘wp-load.php';

// global $wpdbはデータベースからデータを取り出したいときに宣言する
global $wpdb;

// テーブル名「wp_testtable」をとりだす
$testtable = $wpdb->prefix . ‘testtable';

// wp_testtableのデータを配列にいれる
$results = $wpdb->get_results(“SELECT * FROM $testtable”);

SQLインジェクション対策・キーワードにプレースホルダーを使う場合

// WordPressのプレースホルダーは文字列が「%s」整数型は「%d」で表す
// SQL基本形
$meta_key = ‘キーワード';
$sql = $wpdb->prepare( ” SELECT * FROM $wpdb->postmeta WHERE meta_key = ‘%s’ “, $meta_key );

// ワイルドカードをキーワードに使いたいとき(あいまい検索)
// キーワード前後につける「%」は「%%」で表す
//$meta_keyが複数の場合は配列でキーワードを指定する
$sql = $wpdb->prepare( ”
SELECT *
FROM $wpdb->postmeta
WHERE meta_key LIKE ‘%%%s%%’ 
“,$meta_key);

// クエリ実行(用途に応じて選ぶ)
$rows = $wpdb->get_results($sql); //複数行配列ですべて取り出す(一般的)
$rows = $wpdb->get_var($sql); //データベースから変数を一つ返す
$rows = $wpdb->get_row($sql); //クエリから行を取り出す
$rows = $wpdb->get_col($sql); //クエリから列を取り出す

if ( $rows ) 
{
    foreach ( $rows as $row ) 
    {
//パーマリンクを投稿名などに変更している場合idを取得しget_permalinkで投稿名を表示させる
   echo ('<a href="' .get_permalink($row->post_id) .'">' . $row->post_title . '</a>'); 
    } 
}else{
    echo "Not Found";
}

参考URL:WordPress関数リファレンス

wpdbを使わないで直接データベースに接続しWHERE句に複数のキーワードを指定する

//データベースを定義する
define(‘DB_DATABASE’, ‘wpdatabase’);
define(‘DB_USERNAME’, ‘dbuser’);
define(‘DB_PASSWORD’, ‘userpass’);
define(‘PDO_DSN’, ‘mysql:dbhost=localhost;dbname=’ . DB_DATABASE);

//データベースに接続し配列でデータを取得する
try {
// connect
$db = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// queryを使う場合
$stmt = $db->query(“SELECT * FROM wp_testtable WHERE test_title = ‘テスト’ AND test_type LIKE ‘%プレ%'”);

// prepareを使う場合①
// $stmt = $db->prepare(“SELECT test_title FROM wp_testtable WHERE test_type LIKE ?”);
// $stmt->execute([‘%プレ%’]);

// prepareを使う場合②(executeメソッドの引数が複数ある場合)
//WHRE句がLIKEのexecuteに入れるパラメータには%をつけ配列でキーワードを指定する
//$stmt = $dbh->prepare(“select id, name from wp_testtable where id = ? AND test_type LIKE ?”);
//$stmt->execute(array(2, “%プレ%”));

$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $row) {
var_dump($row);
}
echo $stmt->rowCount() . " records found.";
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}

参照:
ドットインストール#09 query()で全件抽出をしてみよう
ドットインストール#10 条件付き抽出をしてみよう
prepareメソッド – PDOの利用 – PHP入門

その他のメモ的なもの

executeは文字列にしか使えないので、数字を入れたいときはbindValueを使う

$stmt = $db->prepare(“select score from users order by score desc limit ?”);
$stmt->bindValue(1, 1, PDO::PARAM_INT);
$stmt->execute();

thumbnail画像(アイキャッチ画像)のURLを取得したいとき

①thumbnailはURLではなくidがwp_postmetaテーブルに保存されているので、まずwp_postsとwp_postmetaのテーブルを内部結合する

SELECT post_title,meta_key,meta_value FROM wp_posts INNER JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id WHERE meta_key = ‘_thumbnail_id';

②thumbnail_idからURLを取得する

随時更新していきます。

関連記事リスト

2012-07-28_20h52_48

コメントスパム対策プラグインAkismetのAPIキー(無料)を取得する方法
コメントスパム対策プラグインAkismetのAPIキー(無料)を取得す...

2012-12-10_10h50_11

あるとちょっと便利なWordPressプラグイン3個
最近はサイト作りはWordPressが基本なのですが、入れているプラグ...

データベースをMySQL4からMySQL5に変更する
MTで作っている現在のサイトを数個リニューアルしようと思っています。つ...

2014-06-20_10h11_18

WordPressの固定ページでカスタムフィールドを使って関連記事を表示させる方法
WordPressの固定ページでカスタムフィールドを使って関連記事を表...

WordPress親固定ページで子ページの記事一覧を表示させる方法
サイト型アフィリエイトサイトを作る時に便利なのが固定ページの利用です。...

2013-07-01_09h50_49

サイトの読み込みページを早くするWordPressプラグイン「Quick Cache」
Googleのスコアカードでサイトの状況の「ページ読み込み時間のパフォ...

2013-01-09_10h02_32

【覚書】WPの固定ページを使ってサイトを作る
WordPressの固定ページを使ってブログではなく、サイトのように使...

2012-12-10_13h59_50

WordPressで特定のカテゴリ(タグ)記事だけを表示させる方法
WordPressで特定のカテゴリやタグ内の記事を表示させる方法。アイ...

image-size

投稿する画像を任意のサイズに変更するワザ
WordPressでブログを投稿していると何かと面倒になってくるのが、...

taxonomy-term.phpで特定の親(固定ページ)をもつ子ページだけ表示させる方法
taxonomy-term.phpに特定の親ページをもつ子ページを表示...

コメントを残す

このページの先頭へ