マストドンでハッシュタグタイムラインを確認した時に、全く関係ない私の投稿があって、ブログに付けたタグの誤りに気付いた。WordPressの編集で該当のタグのチェックを外して保存したり、投稿の一覧で「クイック編集」を使えば、タグの修正ができる。しかし、該当の投稿に関してはどちらで試しても問題のタグを削除できなかった。そこで、データベースのテーブルを直接編集することにした。どのテーブルを編集したら良いかすぐに分からなかったので、Geminiに尋ねたら教えてくれて、問題のタグを削除することができた。Geminiの回答を残しておく。最後にSQLでの確認例を紹介してくれているが、それは実行してない。

WordPressの各記事に付けたタグはどのテーブルに保管されていますか?タグの一覧ではなく、記事にどのタグを付けたかという情報についてです。
WordPressで「どの記事にどのタグが紐付いているか」という情報は、単一のテーブルではなく、3つのテーブルを組み合わせて管理されています。
結論から申し上げますと、具体的な紐付けデータ自体は
wp_term_relationshipsテーブルに保管されています。関連する3つのテーブルと役割
WordPressのタクソノミー(カテゴリーやタグ)の仕組みは、論理的かつ正規化された構造になっています。
テーブル名 役割 このテーブルにある情報の例 wp_posts投稿本体 記事のタイトル、本文、ID wp_term_relationships紐付けの中継 どの記事ID(object_id)に、どのタームID(term_taxonomy_id)が付いているか wp_term_taxonomy分類の種類 そのタームが「post_tag(タグ)」なのか「category(カテゴリー)」なのか wp_termsタグの名前 タグの実際の名称(例:「WordPress」「料理」など)
データのつながり(論理構造)
記事とタグがどのように結びついているかの流れは以下の通りです。
wp_posts: 記事のID(ID)を確認します。wp_term_relationships:
object_idカラムに記事のIDが入ります。term_taxonomy_idカラムに、紐付いているタグの識別番号が入ります。ここが紐付けの核心です。wp_term_taxonomy:term_taxonomy_idを参照し、それが「post_tag」であることを確認します。wp_terms: 最終的なタグの名前(名前やスラッグ)を取得します。注意点
wp_term_relationships にあるのは term_id そのものではなく、term_taxonomy_id です。多くの場合、これらは同じ数値ですが、データベース設計上は別物として扱われているため、SQLを自作する際は注意が必要です。
SQLでの確認例
特定の記事(例:IDが123の記事)に付いているタグ一覧を取得する論理的なクエリは以下のようになります。
SQL
SELECT t.name FROM wp_terms AS t INNER JOIN wp_term_taxonomy AS tt ON t.term_id = tt.term_id INNER JOIN wp_term_relationships AS tr ON tt.term_taxonomy_id = tr.term_taxonomy_id WHERE tr.object_id = 123 AND tt.taxonomy = 'post_tag';この構造により、1つの記事に複数のタグを付けたり、逆に1つのタグを複数の記事で使い回したりする「多対多」のリレーションを実現しています。
さらに詳しく、特定のタグが付いた記事を抽出するSQLの書き方や、特定のテーブルのカラム詳細などについてお知りになりたいことはありますか?



コメント