使用PHP清理WordPress文章分类:仅保留Business主分类
问题分析与修复方案
你的代码不生效核心是两个关键错误:
get_posts参数使用错误get_posts的category参数只接受分类ID/ID数组,若想用分类标识,需用category_name参数传入分类slug(不是显示名称),直接传「Business」无法正确筛选文章。分类判断逻辑错误
wp_get_post_categories()默认返回分类ID数组,不是分类名称。你用in_array('Business', $categories)判断,永远不会成立——数组里是数字ID,不是字符串名称。
修复后的代码
<?php // 获取Business分类的ID,用slug匹配更可靠 $business_cat = get_category_by_slug('business'); if (!$business_cat) { die('Business分类不存在'); } $business_cat_id = $business_cat->term_id; // 获取所有Business分类下的文章,posts_per_page=-1表示获取全部 $posts = get_posts(array( 'category' => $business_cat_id, 'posts_per_page' => -1, 'post_type' => 'post', )); foreach ($posts as $post) { $post_cats = wp_get_post_categories($post->ID); // 仅当文章有多个分类时,替换为只保留Business分类 if (count($post_cats) > 1) { wp_set_post_categories($post->ID, array($business_cat_id), true); } }
注意事项
- 确认分类slug:若你的Business分类slug不是
business(比如是business-topics),需修改get_category_by_slug里的参数,可在WordPress后台「文章-分类」中查看。 - 执行建议:可将代码临时添加到主题
functions.php,或创建单独PHP文件放在网站根目录执行,完成后立即删除,避免重复执行。 - 数据备份:操作前务必备份数据库,防止误操作丢失数据。
内容的提问来源于stack exchange,提问作者ZeusDev
相关产品推荐
相关产品推荐

