スポンサーリンク

WordPressで大量の投稿をカテゴリ分けする

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にしなければならないとか、区切り記号変えなければならないとか、いろいろ問題がまとわりつく。
自身の環境でテストを何回か行い、把握しておくことが必要だ。

タイトルやコンテンツのキーワードでカテゴリを振り分けるプラグインとかあってほしい。いやもしかして、既にある?

スポンサーリンク