Drupal自定义主题循环调用drupal_add_html_head仅添加最后一个meta标签问题
解决Drupal循环添加meta标签仅显示最后一项的问题
嘿,我懂你现在碰到的麻烦——循环里调用drupal_add_html_head,结果页面上只留下最后一个meta标签,其实问题核心就在第二个参数的唯一性上!
你看,drupal_add_html_head的第二个参数是元素的唯一标识key,如果多次调用时用了同一个key,Drupal会判定这是同一个元素,后面的调用会直接覆盖前面的内容。你代码里每次都传固定的'description',自然最后只有最后一个meta能留存下来。
修复方案:给每个meta标签生成唯一的key
只需要把第二个参数改成动态的、独一无二的值就行,比如结合循环里的$key或者meta标签的name属性来生成:
foreach ($metatags as $key => $metatag) { $metatag_description = [ '#type' => 'html_tag', '#tag' => 'meta', '#attributes' => [ 'name' => $metatag['name'], 'content' => $metatag['content'], ] ]; // 用循环的key拼接成唯一标识符,避免覆盖 drupal_add_html_head($metatag_description, 'metatag_' . $key); }
要是你更倾向于用meta的name属性作为key的一部分(前提是每个name本身都是唯一的),也可以这么写:
drupal_add_html_head($metatag_description, 'metatag_' . $metatag['name']);
这样每次调用drupal_add_html_head时,第二个参数都是独一份的,Drupal就会把所有meta标签都添加到页面头部,不会再出现覆盖的情况啦。
内容的提问来源于stack exchange,提问作者Pratikshya
相关产品推荐
相关产品推荐

