MENU

カスタムタクソノミー名をプログラムで変更する方法

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のカスタムタクソノミー名を安全に変更するプログラムの実装方法を紹介しました。

データベース操作を直接行うリスクを軽減し、プログラム的にキャッシュのクリアとパーマリンクの再構築を自動化することで、運用中のサイトに悪影響を与えないようにします。

必要に応じてこのコードを使用すれば、今後の仕様変更にも柔軟に対応できます。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

WordPress Love! 休日はほぼWordPress仲間と一緒に勉強会や写真を撮りに行っています。現在育児中のため、オフが多いです(>△<<<)

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次