求助:WordPress无需插件自动为tech-video自定义文章添加video标签
解决WordPress自定义文章自动打标签问题
首先你的代码存在几个关键问题,以下是修正后的代码,直接放到主题的functions.php文件里即可:
/* 自动为tech-video类型文章添加video标签 */ add_action('save_post_tech-video', 'auto_add_video_tag_to_tech_video', 10, 2); function auto_add_video_tag_to_tech_video($post_id, $post) { // 跳过自动保存和修订版内容 if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return; } // 双重确认当前文章类型为tech-video if ($post->post_type !== 'tech-video') { return; } // 为文章添加video标签,第三个参数是标签对应的分类法(默认标签分类法为post_tag) wp_set_post_terms($post_id, 'video', 'post_tag', true); }
原代码的问题解析:
- 钩子名称错误:你使用的
publish_tech_video并非WordPress有效钩子,针对自定义文章类型的保存操作,正确钩子是save_post_{post_type},这里的{post_type}对应你的自定义文章类型slugtech-video,所以钩子名应为save_post_tech-video。 wp_set_post_terms参数混淆:该函数的第二个参数是要添加的标签名(你需要的是video),第三个参数是分类法标识,默认标签的分类法是post_tag,你之前把标签名和分类法搞反,还错误传入了tech-video作为标签内容。- 未过滤无效触发场景:WordPress在自动保存草稿、创建修订版时都会触发保存钩子,不加判断会导致代码重复执行,甚至引发异常。
如果需要更通用的逻辑(比如后续给多个自定义文章类型加标签),可以用save_post通用钩子,在函数内判断文章类型:
add_action('save_post', 'auto_add_video_tag', 10, 2); function auto_add_video_tag($post_id, $post) { if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return; } // 指定需要自动加标签的自定义文章类型列表 $target_post_types = ['tech-video']; if (!in_array($post->post_type, $target_post_types)) { return; } wp_set_post_terms($post_id, 'video', 'post_tag', true); }
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

