WordPressで大量の投稿をカテゴリ分けするときにphpmyadminとCSVを利用しておこなう方法。
Wordpressの投稿とカテゴリの関係はデータベース上でけっこう複雑になっている。
データベースを触れる環境化にあるなら以下の方法で大量の(数万件)の投稿をカテゴリ分けすることが出来るだろう。
phpmyadminでデータベースを開くといくつかのテーブル(wp_postsとかwp_term_relationships )とかが見えるはず。
wp_posts (投稿)
wp_terms (カテゴリ一覧)
wp_term_relationships (投稿とカテゴリとの紐付け)
wp_term_taxonomy(カテゴリごとの投稿数)
の4つを使う。
実際に編集するのは
wp_term_relationships (投稿とカテゴリとの紐付け)
wp_term_taxonomy(カテゴリごとの投稿数)
の2つで、
wp_posts (投稿)
wp_terms (カテゴリ一覧)
からはCSV上でIDとタイトル、カテゴリIDなどを参考にするため覗いておく。
1.wp_posts (投稿)を「エクスポート」し、CSVで保存
2.IDとタイトル、あるいはコンテンツだけを残して、いらないところ(投稿日時とかとか)は削除
3.タイトルあるいはコンテンツ内からカテゴリに関するキーワードでカテゴリIDをふるので、カテゴリに関するキーワード一覧を作成する(これは結構手間だ)。
カテゴリが3個あったとした例
カテゴリ(wp_terms (カテゴリ一覧)を参照するとわかりやすい)
日本 1
カメルーン 2
オランダ 3
デンマーク 4
タイトルやコンテンツに含まれるであろうキーワード群
※このキーワード群に含まれるキーワードをもっている投稿を各カテゴリに分けるというわけだ。
ニッポン 1
にほん 1
ジャパン 1
中田 1
アフリカ 2
出島 3
チューリップ 3
風車 3
コペンハーゲン 4
4.エクセルでA列に投稿ID(wp_postsのやつね)、B列にタイトルあるいはコンテンツ、C列はあけて、D列にキーワード、E列にキーワードIDを配置する
5.C列に
=INDEX(E:E,MIN(IF(ISNUMBER(FIND($D$1:$D$300&"",A1)),ROW($D$1:$D$300))))
と記入してCtrl+Shift+Enterで入力。←これは配列としてセルに埋め込むため。
そのままオートフィルで下へコピー。
6.これで各投稿にキーワードが含まれていればカテゴリIDが表示されるはずだ。
※うまくできなければ「配列」としてエクセルの関数が入っていない可能性が高い
あるいはキーワード群の中の大文字や全角などがあっていないかもしれない。
7.A列とC列をコピーして別シートに貼ってwp_term_relationshipsをCSVで書き出したものと同じ形式にする。
※列をコピーするときに関数式が入っていると式だけしかコピーできない。コピーは普通に行って貼り付けるときに右クリックで「形式を選択して貼り付け…」で「値」を選んで貼り付けるとうまくいく。
8.wp_term_relationshipsと同じ形式にしたらphpmyadminでインポート(アップロード)。
(エクセルで書き出すとSHIFTJISなので文字コードが合っていない場合はテキストエディタかなにかで変換する)
9.これで各投稿はカテゴリと紐付けされたが、カテゴリごとにいくつ投稿がされているのかをwp_term_taxonomy(カテゴリごとの投稿数)に入れなくてはならない
10.wp_terms (カテゴリ一覧)を参照してカテゴリIDを控えておく。
※大量の場合はphpmyadminでエクスポートしてCSVを書き出すとらくだ。
11.8.のwp_term_relationshipsのデータ作成で使ったものを流用する。C列を新しいシートに貼り付ける。
B列にカテゴリIDを並べる。(ID(数字)だけでよい。)C列に以下の関数式を入れる。
=COUNTIF($A$1:$A$300,B1)
そのままオートフィルで下へコピー。
12.wp_term_taxonomy(カテゴリごとの投稿数)の形式に合せて編集し、phpmyadminでインポート(アップロード)。
これでカテゴリ分けができているはずだ。
【注意!】
phpmyadminでのインポート、エクスポートには癖があるので、注意だ。うちの環境ではload dataにしなければならないとか、区切り記号変えなければならないとか、いろいろ問題がまとわりつく。
自身の環境でテストを何回か行い、把握しておくことが必要だ。
タイトルやコンテンツのキーワードでカテゴリを振り分けるプラグインとかあってほしい。いやもしかして、既にある?