WordPressのカスタムタクソノミーにカテゴリを追加する場合、通常は管理画面で手作業が必要です。
しかし、WP-CLIを利用すると、コマンド1つで登録・更新・削除を自動化できます。
この記事では、「custom_category」タクソノミーに複数カテゴリを一括登録する方法を解説します。
1. なぜWP-CLIでカテゴリ管理するのか?
- 本番・ステージングなど複数環境で同じカテゴリ構成を簡単に同期
- カテゴリに付随するメタ情報(カラーコード、CSSクラス、順序)も同時設定可能
- コード管理で再現性と保守性が向上
2. 実装の全体像
- mu-plugins にコマンド登録ファイルを置く
- wp-cliディレクトリに個別の処理ファイルを作成
- WP-CLIでコマンドを実行(オプションあり)
3. ディレクトリ構成
wp-content/
├── mu-plugins/
│ └── wp-cli-commands.php
└── wp-cli/
└── custom-categories.php
4. コード実装
4-1. mu-plugins/wp-cli-commands.php
<?php
/**
* WP-CLI コマンドを一括登録
*/
if (defined('WP_CLI') && WP_CLI) {
require_once WP_CONTENT_DIR . '/wp-cli/custom-categories.php';
}
4-2. wp-cli/custom-categories.php
<?php
class CustomCategoriesCommand {
/**
* カスタムタクソノミー「custom_category」にカテゴリを登録・同期
*
* ## OPTIONS
* [--dry-run] 実際に変更せずシミュレーション
* [--delete-missing] 定義にないカテゴリを削除
*
* ## EXAMPLES
* wp custom-categories sync
* wp custom-categories sync --dry-run
* wp custom-categories sync --delete-missing
*/
public function sync($args, $assoc_args) {
$dry_run = isset($assoc_args['dry-run']);
$delete_missing = isset($assoc_args['delete-missing']);
// 登録するカテゴリ(ダミー)
$categories = [
['name'=>'ニュース','slug'=>'news','color'=>'#ff0000','class'=>'tab-red','order'=>1],
['name'=>'お知らせ','slug'=>'notice','color'=>'#00ff00','class'=>'tab-green','order'=>2],
['name'=>'イベント','slug'=>'event','color'=>'#0000ff','class'=>'tab-blue','order'=>3],
['name'=>'特集','slug'=>'feature','color'=>'#ffff00','class'=>'tab-yellow','order'=>4],
['name'=>'コラム','slug'=>'column','color'=>'#800080','class'=>'tab-purple','order'=>5],
];
// 既存ターム取得
$existing_terms = get_terms(['taxonomy'=>'custom_category','hide_empty'=>false]);
$existing_slugs = [];
foreach ($existing_terms as $term) {
$existing_slugs[$term->slug] = $term->term_id;
}
// 追加・更新処理
foreach ($categories as $cat) {
if (isset($existing_slugs[$cat['slug']])) {
$term_id = $existing_slugs[$cat['slug']];
if ($dry_run) {
WP_CLI::log("[DRY-RUN] Update: {$cat['name']} ({$cat['slug']})");
} else {
update_term_meta($term_id,'color_code',$cat['color']);
update_term_meta($term_id,'class_name',$cat['class']);
update_term_meta($term_id,'order',$cat['order']);
WP_CLI::log("Updated: {$cat['name']} ({$cat['slug']})");
}
} else {
if ($dry_run) {
WP_CLI::log("[DRY-RUN] Add: {$cat['name']} ({$cat['slug']})");
} else {
$result = wp_insert_term($cat['name'],'custom_category',['slug'=>$cat['slug']]);
if (!is_wp_error($result)) {
$term_id = $result['term_id'];
update_term_meta($term_id,'color_code',$cat['color']);
update_term_meta($term_id,'class_name',$cat['class']);
update_term_meta($term_id,'order',$cat['order']);
WP_CLI::log("Added: {$cat['name']} ({$cat['slug']})");
}
}
}
}
// 不要カテゴリ削除
if ($delete_missing) {
foreach ($existing_slugs as $slug=>$term_id) {
if (!array_filter($categories, fn($c)=>$c['slug']===$slug)) {
$dry_run
? WP_CLI::log("[DRY-RUN] Delete: {$slug}")
: (wp_delete_term($term_id,'custom_category') && WP_CLI::log("Deleted: {$slug}"));
}
}
}
$dry_run
? WP_CLI::success('Dry-run completed. No changes were made.')
: WP_CLI::success('カテゴリの登録・更新・削除が完了しました。');
}
}
WP_CLI::add_command('custom-categories', 'CustomCategoriesCommand');
5. 実行方法
通常同期
wp custom-categories sync
シミュレーション(DB変更なし)
wp custom-categories sync --dry-run
不要カテゴリ削除
wp custom-categories sync --delete-missing
削除も含めてシミュレーション
wp custom-categories sync --dry-run --delete-missing
6. 実行結果(例)
[DRY-RUN] Update: ニュース (news)
[DRY-RUN] Add: 新しいカテゴリ (new-category)
[DRY-RUN] Delete: old-category
Success: Dry-run completed. No changes were made.
7. まとめ
WP-CLIを活用すれば、WordPressのカスタムタクソノミー管理をコードで完全制御できます。
今回の仕組みは、複数環境間でカテゴリ構成を同期する際や、カラーコードやCSSクラスなどの付加情報を一括設定したい場合に特に有効です。
コメント