WordPress头部meta获取文章slug拼接多域名hreflang链接报错解决
错误原因
你之前使用https://domainB<?php the_permalink(); ?>写法报错的核心原因有两个:
the_permalink()会直接输出包含当前站点完整域名的文章全路径,硬拼接其他域名会生成https://domainBhttps://currentdomain.com/post-slug这类格式错误的链接- 未经过WordPress安全函数处理的硬拼接跨域链接,会触发系统的nonce安全校验,直接抛出
nonce_failure报错
实现方案
正确实现需要先提取文章不含域名的相对路径,再分别和两个域名拼接,通过WordPress官方钩子挂载到头部输出。将以下代码放入当前主题的functions.php文件,或者通过代码片段插件插入即可生效:
add_action('wp_head', function() { // 仅在文章、页面、自定义文章类型详情页执行,避免非详情页输出无效链接 if (!is_singular()) return; global $post; // 解析永久链接,提取不含域名的相对路径,自动适配所有固定链接结构 $post_relative_path = wp_parse_url(get_permalink($post->ID), PHP_URL_PATH); // 替换为你实际持有的两个域名,注意域名末尾不要加斜杠 $domain_en = 'https://domainA.com'; $domain_za = 'https://domainB.com'; // 输出en版本alternate链接 printf( '<link rel="alternate" href="%s" hreflang="en" />%s', esc_url($domain_en . $post_relative_path), PHP_EOL ); // 输出za版本alternate链接 printf( '<link rel="alternate" href="%s" hreflang="za" />%s', esc_url($domain_za . $post_relative_path), PHP_EOL ); });
注意事项
- 代码中
$domain_en、$domain_za的值需要替换为你实际持有的两个域名,域名末尾不要添加斜杠,避免生成双斜杠的异常路径 - 路径提取逻辑兼容所有WordPress固定链接结构,不需要手动调整slug拼接规则
- 所有输出链接都经过WordPress官方
esc_url()函数做安全转义,符合系统安全规范,不会触发nonce校验错误 - 最终输出的标签格式完全符合你的预期,示例效果如下:
<link rel="alternate" href="https://domainA.com/postname" hreflang="en" /> <link rel="alternate" href="https://domainB.com/postname" hreflang="za" />
内容的提问来源于stack exchange,提问作者Anton Nb
相关产品推荐
相关产品推荐

