WordPressで使用している カスタムタクソノミー(custom taxonomy) の名前を変更したい場合、通常はデータベースを直接操作する必要があります。しかし、データベース操作にはリスクが伴うため、プログラムで安全かつ効率的に変更する方法を紹介します。
カスタムタクソノミー名を変更する理由
運用中のサイトで、タクソノミー名がわかりづらかったり、仕様変更が必要になった場合に、カスタムタクソノミーの名前を変更するケースがあります。
しかし、単純にテーマやプラグインのコードでカスタムタクソノミーの名前を変えるだけでは、既存のデータや リンク構造が機能しなくなる可能性があるため、データベース操作が必要になります。
ソースコードの概要と動作説明
以下のコードは、旧タクソノミー名から新タクソノミー名にデータを更新し、キャッシュをクリアした後、パーマリンクの再構築を行います。
function change_taxonomy_name($old_taxonomy = '古いカスタムタクソノミー名', $new_taxonomy = '新しいカスタムタクソノミー名') {
global $wpdb;
// 1. wp_term_taxonomy テーブルのタクソノミー名を更新
$wpdb->update(
$wpdb->term_taxonomy,
['taxonomy' => $new_taxonomy], // 新しいタクソノミー名
['taxonomy' => $old_taxonomy] // 旧タクソノミー名
);
// 2. キャッシュのクリア(オプションの一時データ削除)
$wpdb->query(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%';"
);
// 3. リライトルールの再生成(パーマリンクを再構築)
flush_rewrite_rules();
}
// 実行:この関数はサイトがロードされたときに一度だけ実行されます。
add_action('init', function() {
// タクソノミー名を変更
change_taxonomy_name('古いカスタムタクソノミー名', '新しいカスタムタクソノミー名');
// 実行後はこのアクションを削除し、不要な呼び出しを防ぎます。
remove_action('init', __FUNCTION__);
});
wp_term_taxonomy
テーブルの更新
$wpdb->update()
を使って、データベース内の taxonomy
名を変更します。
WordPressはタクソノミー情報をこのテーブルで管理しているため、正しく更新する必要があります。
キャッシュのクリア
WordPressは、サイトのパフォーマンス向上のため、いくつかの情報を キャッシュ(一時データ) として保存します。
_transient_
がつくキャッシュを削除することで、古いタクソノミー名のキャッシュをクリアします。
パーマリンクの再構築
flush_rewrite_rules()
で パーマリンクのルールを再生成し、古いタクソノミー名の影響を排除します。
add_action と remove_action の使い方
init
フックを使って関数を一度だけ実行します。
実行後に remove_action()
で不要な呼び出しを防ぐことで、パフォーマンスに影響が出ないようにしています。
まとめ
本記事では、WordPressのカスタムタクソノミー名を安全に変更するプログラムの実装方法を紹介しました。
データベース操作を直接行うリスクを軽減し、プログラム的にキャッシュのクリアとパーマリンクの再構築を自動化することで、運用中のサイトに悪影響を与えないようにします。
必要に応じてこのコードを使用すれば、今後の仕様変更にも柔軟に対応できます。
コメント