- ワードプレスのカテゴリーを一括登録する際、以前は便利なプラグインがあった
- WP Taxonomy Import – WordPress plugin | WordPress.org
- セキュリティの関係による理由から、2022年 8月よりこのプラグインを利用できなくなったらしい
- WP Taxonomy Import – WordPress plugin | WordPress.org
This plugin has been closed as of August 5, 2022 and is not available for download. Reason: Security Issue.
- 数百のカテゴリーを登録したかったので、手動での対応は不可能
- phpMyAdmin から SQL 文で
INSERT
することにした- CSV でのアップロードも可能ではあるが、後述する
null
の値の記述方法がわからなかったので SQL で実施- 空白にすると空白文字列に、
null
にすると文字列として扱われてしまう
- 空白にすると空白文字列に、
- CSV でのアップロードも可能ではあるが、後述する
ワードプレスのデータベース MySQL におけるカテゴリーの扱い
- 以下のような形でデータを紐付けて管理しているよう
- テーブル
wp_terms
→ 各ターム - テーブル
wp_term_taxonomy
→ 各タームとタクソノミー(分類)を紐付ける
- テーブル
- はじめ
wp_terms
だけを登録していて、ワードプレス管理画面を見ても反映されなかったため「?」となっていたが、wp_term_taxonomy
で紐付けを行う必要があった
タームとタクソノミー
- ターム
- 単一のカテゴリーやタグの「名前・スラッグなど」の情報
- タクソノミー
- タームの括りを分類するもの
- 例)
- カテゴリー「北海道」
- 「カテゴリー」という名前のタクソノミーに分類された、「北海道」という名前を持つターム
- タグ「北海道」
- 「タグ」という名前のタクソノミーに分類された、「北海道」という名前を持つターム
- カテゴリー「北海道」
- ざっくりした言い方をすると、「カテゴリー」という名前のカテゴリーの中の「北海道」というカテゴリー、みたいなトンチっぽい内容
- なので、
wp_terms
にはワードプレスのカテゴリーもタグも、それぞれのタームはすべてこのテーブルに集約される- それらを各タクソノミーに紐付ける必要がある
- そりゃ、
wp_terms
だけ登録してもワードプレス上には反映されないわけだ。。
- そりゃ、
- それらを各タクソノミーに紐付ける必要がある
データベースからカテゴリーを一括登録
- もっと良いやり方があるのかもしれないが、ひとまず下記の方法で実現はできた
(はじめに)補足
- 各種 ID を
null
にするのはワードプレスの仕様上、新規データは連番で自動で割り当てされていくため、空白ではなくnull
を指定する必要があるらしい - (かなり愚直なやり方だとは思うが)下記の SQL 文を VS Code なりで行を一括複製すれば一瞬で作業を終えることができる
- 試しに 47 都道府県をカテゴリー一括登録した際、各テーブルとも 1 秒未満で処理を実施できた
Step 1 : テーブル wp_terms
登録
- カラム名
term_id
,name
,slug
,term_group
,term_order
INSERT INTO wp_terms
VALUES(null, '北海道', 'hokkaido', '0', '1');
term_id
→null
name
→'カテゴリー名'
slug
→'カテゴリースラッグ'
term_group
→'0'
(よく知らない)term_order
→'1'
(カテゴリーの並び順)
Step 2 : テーブル wp_terms
の情報をダウンロード
- テーブル
wp_terms
の情報をダウンロードして、各タームのterm_id
を把握しておく - ↓ ↓ ↓ ↓ ↓
- 前述の通り、基本的にはワードプレス上で管理される各種情報の ID は「連番」で登録されていくはず (?) なので、VS Code で行を複製して連番をふる拡張機能を使えば簡単に SQL 文各行を生成できる
Step 3 : テーブル wp_term_taxonomy
登録
- カラム名
term_taxonomy_id
,term_id
,taxonomy
,description
,parent
,count
INSERT INTO wp_term_taxonomy
VALUES(null, '60', 'category', '', '0', '0');
term_taxonomy_id
→null
term_id
→'60'
(wp_terms の term_id に登録された ID)taxonomy
→'category'
(タグの場合はpost_tag
)description
→''
parent
→'0'
(親子階層にするならいじる?)count
→'0'
(とりあえず新規登録なので 0 で良さげ)