把下面代码放到当前主题的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 最小的标签,其他的会被合并并删除。