如何使用Yoast过滤器修改wp_head输出 调整自定义meta标签位置
问题根源
你写的代码输出位置不对核心是两个原因:
- WordPress钩子的优先级规则是数字越小执行时间越早,你给
wpseo_head设置的优先级是2,远早于Yoast插件输出meta description标签的执行时机(Yoast内部meta description标签挂载在wpseo_head的优先级为6),所以自定义的keywords标签会先输出,跑到description标签前面的位置。 - 原代码用
esc_html转义keywords内容不合适,meta标签的content属性应该用esc_attr转义,避免内容里的引号、特殊字符破坏HTML结构。
最优解决方案
直接用Yoast官方预留的专有用法,钩子会精准在meta description标签输出完成后触发,不会因为Yoast版本迭代调整内部优先级出现错位问题,代码如下:
/* 在Yoast meta description标签后输出自定义keywords meta标签 */ function add_custom_meta_key(){ if( is_single() ){ $key = get_post_meta( get_the_ID(), 'keywords', true); if( ! empty( $key ) ){ $meta_key = esc_attr( $key ); echo '<meta name="keywords" content="' . $meta_key . '" />' . "\n"; } } } add_action( 'wpseo_head_meta_description_after', 'add_custom_meta_key', 10 );
旧版Yoast兼容写法
如果你用的Yoast版本较老,没有wpseo_head_meta_description_after这个钩子,可以调整挂载到wpseo_head的优先级为7(仅比description输出的优先级6大1,刚好在description输出后立刻执行,不会跑到其他更靠后的meta标签后面):
add_action( 'wpseo_head', 'add_custom_meta_key', 7 );
注意:不要把优先级设置为10以上的数值,否则keywords标签会出现在og标签、canonical标签等其他Yoast输出的meta内容后方,无法紧接description标签。
内容的提问来源于stack exchange,提问作者SS Apps
相关产品推荐
相关产品推荐

