WordPress短代码在文章页(single.php)失效,页面页正常求助
这种情况我之前帮朋友排查过类似的,既然切换到TwentyFifteen这类默认主题就正常,那确实是你的_underscores主题模板或者功能函数里的配置问题,大概率是内容输出的逻辑没处理好短代码解析,给你几个排查和解决的步骤:
第一步:检查single.php的内容输出代码
_underscores默认的内容输出是用the_content()函数,这个函数会自动触发WordPress的短代码解析机制。但如果你的single.php里被改成了直接调用文章内容字段,比如:echo $post->post_content;这种写法是不会解析短代码的,直接把原始内容输出,而且如果短代码被主题的其他过滤逻辑处理,可能连代码片段都看不到。你需要把它改成标准的:
the_content();第二步:检查functions.php里的钩子是否被修改
有些主题会修改the_content的过滤钩子,要是不小心移除了短代码解析的过滤器,也会导致失效。你可以打开主题的functions.php,看看有没有类似这样的代码:remove_filter('the_content', 'do_shortcode');如果有,直接删掉这行就行;如果没找到,也可以手动添加回去确保优先级正确:
add_filter('the_content', 'do_shortcode', 11);这里的
11是优先级,确保短代码解析在其他内容过滤之后运行,避免被覆盖。第三步:排查是否有内容过滤函数移除了短代码
要是你的主题在输出内容前用了wp_strip_all_tags()这类函数,会把短代码当成HTML标签剥离掉,比如:echo wp_strip_all_tags(get_the_content());这种情况可以改成保留短代码的写法,比如:
// 先解析短代码再剥离标签 echo wp_strip_all_tags(do_shortcode(get_the_content())); // 或者不需要剥离标签的话直接用the_content()兜底方案:手动强制解析短代码
要是上面的方法都不行,你可以在输出内容的时候手动用do_shortcode()包裹,确保短代码被解析,比如:echo do_shortcode(get_the_content());
一般按照这个顺序排查,很快就能找到问题所在,毕竟_underscores默认模板是支持短代码的,大概率是自定义修改的时候改了默认的内容输出逻辑。
内容的提问来源于stack exchange,提问作者oneone

