如何在responsivevoice短码中嵌套页面标题短码读取文章标题?
解决短码嵌套不生效的问题
嘿,我懂你现在的麻烦——想把获取页面标题的短码嵌套进responsivevoice短码里,让它自动朗读当前文章的标题,但目前这么做完全没效果,对吧?
问题出在WordPress默认不支持短码嵌套解析:当你把一个短码放在另一个短码的内容区域时,系统只会把内部的短码当成普通文本输出,不会去执行它的功能。所以[responsivevoice][page_title][/responsivevoice]这种写法,只会让插件朗读“[page_title]”这串字符,而不是实际的页面标题。
下面给你两种可行的解决方案,按需选择:
方案1:修改responsivevoice插件的短码逻辑(支持嵌套)
如果你愿意调整插件的代码(注意:插件更新后会覆盖修改,记得备份或者用子插件),可以找到插件里处理短码的函数,给它加上解析内部短码的能力:
- 打开responsivevoice插件的主文件,找到类似
responsivevoice_shortcode的函数(通常是注册短码的地方) - 在函数里处理
$content的时候,调用do_shortcode()来解析嵌套的短码,示例代码如下:
function responsivevoice_shortcode($atts, $content = null) { // 先解析内容里的嵌套短码 if (!empty($content)) { $content = do_shortcode($content); } // 保留插件原有的逻辑,比如生成朗读脚本 $atts = shortcode_atts(array( 'voice' => 'UK English Male', // 其他默认参数 ), $atts); return '<script>responsiveVoice.speak("' . esc_html($content) . '", "' . esc_attr($atts['voice']) . '");</script>'; } add_shortcode('responsivevoice', 'responsivevoice_shortcode');
修改后,再用[responsivevoice][page_title][/responsivevoice]就能正常读取页面标题了。
方案2:自定义整合短码(更稳妥,避免插件更新覆盖)
如果不想改动原插件,直接自己写一个整合了“获取标题+朗读”功能的自定义短码更省心,步骤如下:
- 打开当前主题的
functions.php文件(或者用代码片段插件添加) - 加入以下代码:
function speak_current_page_title_shortcode($atts) { // 获取当前文章/页面的标题 $page_title = get_the_title(); // 可自定义朗读语音,默认用UK English Male $atts = shortcode_atts(array( 'voice' => 'UK English Male' ), $atts); // 生成responsivevoice的调用脚本,注意转义避免JS错误 return '<script>responsiveVoice.speak("' . esc_html($page_title) . '", "' . esc_attr($atts['voice']) . '");</script>'; } add_shortcode('speak_page_title', 'speak_current_page_title_shortcode');
- 保存后,直接在页面里使用
[speak_page_title](或者带参数[speak_page_title voice="US English Female"])就能直接朗读当前页面标题了,完全不需要嵌套。
额外提醒
不管用哪种方案,都要注意页面标题里的特殊字符(比如引号),上面的代码里用了esc_html()和esc_attr()来转义,能避免出现JS语法错误,一定要保留这部分哦。
内容的提问来源于stack exchange,提问作者Fotogênicas Brasil
相关产品推荐
相关产品推荐

