WordPressのタグをデータベースで修正

 マストドンでハッシュタグタイムラインを確認した時に、全く関係ない私の投稿があって、ブログに付けたタグの誤りに気付いた。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」「料理」など)

データのつながり(論理構造)

記事とタグがどのように結びついているかの流れは以下の通りです。

  1. wp_posts: 記事のID(ID)を確認します。
  2. wp_term_relationships:
    • object_id カラムに記事のIDが入ります。
    • term_taxonomy_id カラムに、紐付いているタグの識別番号が入ります。ここが紐付けの核心です。
  3. wp_term_taxonomy: term_taxonomy_id を参照し、それが「post_tag」であることを確認します。
  4. 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の書き方や、特定のテーブルのカラム詳細などについてお知りになりたいことはありますか?

未分類
管理人のマストドンアカウントへのリンクなど

コメント

タイトルとURLをコピーしました