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); //クエリから列を取り出す

[html]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";
}[/html]

参考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を使う

[html][/html]$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を取得する

随時更新していきます。