WordPress如何自动将genre分类法值按规则同步到文章post_tags字段
问题原因
你原来的代码存在两个核心错误:
- 调用了
get_the_term_list()获取分类数据,该函数返回的是带HTML链接的分类字符串,不是可拆分的分类名称集合,多个分类会直接拼接成整段文本 wp_set_object_terms()的第二个参数传入字符串时只会创建单个标签,只有传入一维数组才会生成多个独立标签
修复后的完整代码
add_action('save_post', 'sync_genre_to_post_tags'); function sync_genre_to_post_tags($post_id) { // 跳过自动保存、修订版场景,避免误触发 if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return; } $taxonomy = 'post_tag'; // 直接获取genre分类法的分类名称数组 $genre_terms = wp_get_post_terms($post_id, 'genre', array('fields' => 'names')); // 没有选中genre分类或查询出错时直接返回 if (is_wp_error($genre_terms) || empty($genre_terms)) { return; } // 遍历给每个分类名单独加前后缀,整理为独立标签数组 $sync_tags = array(); foreach ($genre_terms as $term_name) { $sync_tags[] = 'Android' . $term_name . 'Download'; } // 第四个参数默认为true:将同步的标签追加到原有标签之后 // 如果需要覆盖原有标签,只保留genre同步的标签,可把第四个参数改为false return wp_set_object_terms($post_id, $sync_tags, $taxonomy, true); }
逻辑说明
- 增加了自动保存、修订版的判断,避免后台自动刷新时重复执行逻辑
- 改用
wp_get_post_terms()直接获取genre分类的名称数组,无需处理额外HTML格式 - 遍历每个分类名单独拼接前后缀,生成独立的标签数组后再传入标签设置函数
- 支持自定义是否保留原有文章标签,可通过修改最后一个参数配置
内容的提问来源于stack exchange,提问作者Mr SKT
相关产品推荐
相关产品推荐

