如何让WordPress文章标题中的shortcode在归档页列表中正常渲染
解决方法
- 先修正现有代码的语法错误:你当前使用的代码中,
add_filter行使用了中文全角引号,会直接导致过滤器规则不生效,需先替换为英文半角引号。 - 调整过滤器逻辑适配归档页场景:多数WordPress主题在归档页、文章列表页输出标题时,要么短代码解析优先级不够被其他主题自带的标题处理逻辑覆盖,要么会调用额外的标题输出函数导致现有
the_title过滤器没有生效,你可以直接替换为以下完整代码:
// Shortcode 实现输出当前年份 function year_shortcode () { $year = date_i18n ('Y'); return $year; } add_shortcode ('year', 'year_shortcode'); // 为标题添加shortcode解析,调高优先级避免被其他过滤器覆盖,同时排除菜单场景 add_filter( 'the_title', function( $title, $id = null ) { // 仅对文章/页面标题生效,不对菜单标题解析 if ( !is_null($id) && get_post_type($id) !== 'nav_menu_item' ) { $title = do_shortcode( $title ); } return $title; }, 20 ); add_filter( 'wpseo_title', 'do_shortcode' ); add_filter( 'wpseo_metadesc', 'do_shortcode' ); // 适配部分主题列表页调用the_title_attribute输出标题的场景 add_filter( 'the_title_attribute', function( $attribute ) { return do_shortcode( $attribute ); }, 20 );
以上代码调高了过滤器优先级为20(默认优先级为10),可以确保短代码解析在其他默认标题处理逻辑执行后触发,不会被覆盖;同时增加了菜单标题的排除逻辑,避免导航菜单内的同类字符被误解析。
如果替换后依旧不生效,可以检查所用主题的归档页模板代码,找到标题输出对应的自定义函数,参照上面的写法为对应的过滤器添加短代码解析即可。
内容的提问来源于stack exchange,提问作者Kyle Melton
相关产品推荐
相关产品推荐

