PHP自定义函数返回拼接字符串时未正常输出变量值如何解决
问题原因
你写的字符串拼接语法本身没有问题,变量不显示的核心问题出在参数接收/传递环节,结合函数名listShortcode判断,绝大多数情况是你把这个函数作为WordPress的短代码回调使用,但没按短代码的规则接参数:
- WordPress短代码回调的第一个入参默认是短代码的属性数组,不是你以为的单独id值。你直接把属性数组当$id拼到字符串里,PHP把数组转字符串时只会输出空值,最后返回的内容就只剩写死的固定字符串。
- 如果是普通PHP函数场景,那就是你调用函数的时候没给$id传值,$id是null,拼到字符串里自然看不到内容。
- 代码里
$i = $id;这行完全没用,属于冗余代码,删掉就行。 - 你贴的代码里出现的
"是网页展示时转义出来的双引号,要是你实际写代码的时候真的把"写在PHP语句里,会直接报语法错误,根本跑不起来,这个不用在意。
修改方案
根据你的使用场景二选一即可:
用作WordPress短代码回调
按官方规范解析属性再拼内容,代码如下:
function listShortcode($atts) { // 解析传入的短代码属性,给id设默认值0 extract(shortcode_atts([ 'id' => 0, ], $atts)); // 双引号里可以直接嵌变量,不用拆成多段拼接,写起来更简单 $html = "<h2>List number {$id}</h2> <p>other</p>"; return $html; } // 注册短代码 add_shortcode('mylist', 'listShortcode');
之后写内容用[mylist id=12]这种格式调用短代码,就能正常显示id值。
作为普通PHP函数单独调用
调用的时候必须传id参数,最好加个兜底逻辑避免空值报错,代码如下:
function listShortcode ($id) { // 没传id的时候给个默认提示 $id = isset($id) ? $id : '未指定ID'; $html = "<h2>List number {$id}</h2> <p>other</p>"; return $html; } // 正确调用示例,必须传入id值 echo listShortcode(27);
执行后会输出<h2>List number27</h2> <p>other</p>,变量值可以正常嵌入。
内容的提问来源于stack exchange,提问作者Ashot
相关产品推荐
相关产品推荐

