大小写不同但名字相同的标签合并方法

把下面代码放到当前主题的functions.php

/**
 * 扫描并合并大小写重复的标签
 * 用法:后台访问 ?merge_tags=1 即可执行
 */
add_action('admin_init', function () {
    if (!current_user_can('manage_categories')) return;
    if (!isset($_GET['merge_tags'])) return;

    global $wpdb;

    // 找出大小写重复的标签
    $duplicates = $wpdb->get_results("
        SELECT LOWER(name) AS lower_name, GROUP_CONCAT(term_id) AS term_ids, COUNT(*) AS cnt
        FROM {$wpdb->terms}
        GROUP BY lower_name
        HAVING cnt > 1
    ");

    foreach ($duplicates as $dup) {
        $ids = explode(',', $dup->term_ids);
        sort($ids); // 保留最小的 term_id
        $keep = array_shift($ids);

        foreach ($ids as $remove) {
            // 把文章关系迁移到保留的标签
            $keep_tax_id = $wpdb->get_var($wpdb->prepare(
                "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='post_tag' LIMIT 1",
                $keep
            ));
            $remove_tax_id = $wpdb->get_var($wpdb->prepare(
                "SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy='post_tag' LIMIT 1",
                $remove
            ));

            if ($keep_tax_id && $remove_tax_id) {
                $wpdb->update(
                    $wpdb->term_relationships,
                    ['term_taxonomy_id' => $keep_tax_id],
                    ['term_taxonomy_id' => $remove_tax_id]
                );
                $wpdb->delete($wpdb->term_taxonomy, ['term_id' => $remove, 'taxonomy' => 'post_tag']);
                $wpdb->delete($wpdb->terms, ['term_id' => $remove]);
            }
        }
    }

    wp_safe_redirect(admin_url('edit-tags.php?taxonomy=post_tag&merged=1'));
    exit;
});

登录后台,访问:

https://你的站点/wp-admin/?merge_tags=1
脚本会自动扫描所有标签,把大小写重复的合并到一个标签里。
完成后会跳转到标签管理页,并在 URL 上带 merged=1。
务必先备份数据库,避免误操作。
默认只处理 post_tag(文章标签),不会动分类。
保留的是 term_id 最小的标签,其他的会被合并并删除。