最近、パーマリンクの構造を数字ベースのものから /%category%/%postname% に変更をしてみた。
ところが1つの記事に対して親・子・孫のカテゴリーを選択しているこのサイトの場合なかなか希望通りにならなかった。
プラグイン等を試してみたけれど、動作が一定でないように見えるうえに他のプラグインとの競合も怖い。
さらに、もしプラグインがwordpress本体バージョンアップについていけなくなった場合、同じ動作をするプラグインが見つかるとも限らない。
というわけで、phpMyAdminを使って比較的簡単にカテゴリーIDを整理する方法を検討してみた。
このサイトの場合で、ワイン>ヨーロッパ>イタリア>トスカーナというカテゴリー構造にヴィノABCを置く場合
/wine/europe/italy/toscana/vino-abc
というパーマリンクになってほしいが、
/wine/europe/italy/vino-abc
/wine/europe/vino-abc
/wine/vino-abc
というようになってしまうことがある(最もカテゴリーIDが小さいカテゴリーが使われるルールのため)
そのため、下層を持つカテゴリーのみを新たに作り直して、投稿を付け替えればやりたいことが実現できる。
【phpMyAdminで操作】
まずはSQL全体のバックアップをとる(失敗した時に戻せるように)
【wordpress管理画面で操作】
まず、親子構造になっているカテゴリーの親(最下層を除く)カテゴリーの複製を作る
作る順番は孫→子→親の順で(若いIDが優先されるため深い層を若いID番号に)
ex. イタリア(italy)→イタリア2(italy2)
イタリアのカテゴリーIDが50、イタリア2のIDが90だったとする
【phpMyAdminで操作】
wp_term_relationships の term_taxonomy_id を 50→90 へ置き換える
SQLのクエリを実行する↓
update wp_term_relationships set term_taxonomy_id=replace(term_taxonomy_id, “50”, “90”);
wp_term_taxonomy の parent を 50→90 へ置き換える
SQLのクエリを実行する↓
update wp_term_taxonomy set parent=replace(parent, “50”, “90”);
wp_term_taxonomy の term_id が 90 の行の count を 50 の行の数値と同じにする
手で変えた方が早いがSQLでするなら
update wp_term_taxonomy set count=1234 where term_taxonomy_id=90;
【wordpress管理画面で操作】
カテゴリー編集画面で
イタリア(italy)→イタリア旧(italyold)へ名称変更
イタリア2(italy2)→イタリア(italy)へ名称変更
イタリア旧(italyold)を削除する
これを下層を持つカテゴリーについて下層から順番に全て行えば完了
1500以上投稿数がある場合でも、1時間もあれば十分に作業可能。
コメント