ショコラ
ワードプレス 投稿に関係するカテゴリ・タグをSQLで取得するには?
投稿情報は wp_posts 。カテゴリ、タグのマスターは wp_terms 。
カテゴリ、タグの構造をもっているのが wp_term_taxonomy 。
投稿情報とカテゴリ、タグを結び付けるのは wp_term_relationships (こちら↑一旦、上のwp_term_taxonomy を結合しなければなりません)。
なので投稿に紐づくカテゴリ、タグIDを取得するには以下のようにする。
①SELECT term_taxonomy_id FROM wp_term_relationships WHERE object_id={投稿ID}
②SELECT term_id FROM wp_term_taxonomy WHERE term_taxonomy_id in ({term_taxonomy_id })
もっさん先輩
投稿に関係する情報を取得する。
SELECT
p.ID,
p.post_type,
p.post_name,
x.taxonomy,
x.parent,
x.count,
t.term_id,
t.name
FROM
wp_posts p
LEFT JOIN wp_term_relationships r ON p.ID = r.object_id
LEFT JOIN wp_term_taxonomy x ON r.term_taxonomy_id = x.term_taxonomy_id
LEFT JOIN wp_terms t ON x.term_id = t.term_id
WHERE
p.ID='1';
投稿に関係する カテゴリID を取得する。
SELECT
t.term_id
FROM
wp_posts p
LEFT JOIN wp_term_relationships r ON p.ID = r.object_id
LEFT JOIN wp_term_taxonomy x ON r.term_taxonomy_id = x.term_taxonomy_id
LEFT JOIN wp_terms t ON x.term_id = t.term_id
WHERE
p.ID='1'
and x.taxonomy='category';
投稿に関係する タグID を取得する。
SELECT
t.term_id
FROM
wp_posts p
LEFT JOIN wp_term_relationships r ON p.ID = r.object_id
LEFT JOIN wp_term_taxonomy x ON r.term_taxonomy_id = x.term_taxonomy_id
LEFT JOIN wp_terms t ON x.term_id = t.term_id
WHERE
p.ID='1'
and x.taxonomy='post_tag';
公開されている投稿に、post-grid を追加するSQLを作成するプログラム
<?php
//
// 公開されている投稿に、post-grid を追加するSQLを作成するプログラム
//
$dsn = 'mysql:host={ホスト};port=3306;dbname={データベース名}';
$user = '{ユーザー名}';
$password = '{パスワード}';
$pdo = new PDO($dsn,$user,$password);
$stm = $pdo->prepare("SELECT * FROM wp_posts WHERE post_status='publish'");
$stm->execute();
while (false !== ($wp_post = $stm->fetch(PDO::FETCH_ASSOC))) {
$post_id = $wp_post['ID'];
// 既に post-grid があるなら処理しない。
$post_content = $wp_post['post_content'];
if (mb_ereg('wp:uagb/post-grid',$post_content)) {
continue;
}
// タグID を取得する。
$sql =<<< SQL
SELECT
t.term_id
FROM
wp_posts p
LEFT JOIN wp_term_relationships r ON p.ID = r.object_id
LEFT JOIN wp_term_taxonomy x ON r.term_taxonomy_id = x.term_taxonomy_id
LEFT JOIN wp_terms t ON x.term_id = t.term_id
WHERE
p.ID='{$post_id}'
AND x.taxonomy='post_tag';
SQL;
$wp_term = $pdo->query($sql)->fetch(PDO::FETCH_ASSOC);
if (false !== $wp_term) {
$post_grid =<<< POSTGRID
<!-- wp:uagb/post-grid {"block_id":"ad9b2fc5","categories":"{$wp_term['term_id']}","taxonomyType":"post_tag"} /-->
POSTGRID;
echo "UPDATE wp_posts SET post_content=CONCAT(post_content,'{$post_grid}') WHERE ID={$post_id};",PHP_EOL;
}
}
以上