如何将WordPress CPT默认标题设置为分类+发布日期
嘿,我来帮你搞定这个自定义文章类型默认标题的问题!之前我在做项目时也踩过类似的坑,折腾了好几种写法才摸透门道。咱们直接上可行的方案,再拆解细节帮你避坑。
核心解决方案:用
default_title钩子定制标题 WordPress提供了default_title过滤器,专门用来修改文章的默认标题。关键是要精准针对你的自定义文章类型(CPT)生效,还要正确获取分类和日期。
完整代码示例
把这段代码加到你的主题functions.php文件里,或者创建一个简单的自定义插件(更推荐,避免主题更新丢失代码):
add_filter('default_title', 'custom_cpt_auto_title', 10, 2); function custom_cpt_auto_title($default_title, $post) { // 替换成你的自定义文章类型SLUG,比如'portfolio'、'product' $target_cpt = 'your_cpt_slug'; // 只对目标CPT生效,其他文章类型保持默认 if ($post->post_type !== $target_cpt) { return $default_title; } // --- 处理分类名称 --- // 如果你用的是WordPress默认分类法(category),用下面这段 $categories = get_the_category($post->ID); $cat_name = !empty($categories) ? $categories[0]->name : '未分类'; // 如果你用的是自定义分类法,替换成这段(把'your_custom_taxonomy'换成你的分类法SLUG) // $terms = wp_get_post_terms($post->ID, 'your_custom_taxonomy', ['fields' => 'names']); // $cat_name = !empty($terms) ? $terms[0] : '未分类'; // --- 处理发布日期 --- // 日期格式可自定义,比如'Y年m月d日'、'm/d/Y',参考PHP date()格式参数 $post_date = current_time('Y-m-d'); // 拼接最终标题 return $cat_name . ' ' . $post_date; }
关键细节避坑
- 务必替换SLUG:把代码里的
your_cpt_slug和自定义分类法SLUG换成你实际使用的,比如你的CPT是“课程”,SLUG可能是course。 - 分类获取逻辑:如果你的CPT允许选多个分类,代码里默认取第一个;如果需要其他逻辑(比如取特定父分类),可以调整
get_the_category或wp_get_post_terms的参数。 - 时区正确的日期:用
current_time()而不是原生date(),因为它会跟随WordPress后台设置的时区,避免日期显示错误。 - 钩子优先级:代码里的
10是默认优先级,如果发现标题被其他插件/主题覆盖,可以把数值调高到20甚至更高。
调试技巧
如果还是没生效,打开WordPress的调试模式(在wp-config.php里设置define('WP_DEBUG', true);),检查是否有报错:
- 看看是不是分类法SLUG写错了,导致取不到分类名称
- 确认当前编辑的文章确实是目标CPT类型
- 打印变量排查:比如在函数里加
var_dump($categories);看看分类是否正确获取到
内容的提问来源于stack exchange,提问作者DarkSpartan47
相关产品推荐
相关产品推荐

