- ワードプレスのカテゴリーを一括登録する際、以前は便利なプラグインがあった
- 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→nullname→'カテゴリー名'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→nullterm_id→'60'(wp_terms の term_id に登録された ID)taxonomy→'category'(タグの場合はpost_tag)description→''parent→'0'(親子階層にするならいじる?)count→'0'(とりあえず新規登録なので 0 で良さげ)