在WordPress子目录multisite中自动添加hreflang标签



我们有一个WordPress MU子目录网络设置:

  • www.example.com -全球美国主要网站
  • www.example.com/uk/-为英国游客展示
  • www.example.com/au/-为澳大利亚游客展示。

我们想为每个网页添加hreflang标签,并排除locations自定义帖子类型。

从这个问题,我已经调整了子主题的代码functions.php:

function add_hreflang_attribute() {
$site_url = network_site_url(); // base URL
$alt_langs = array( '', 'au', 'uk' ); // two-letter language code
$page_path = substr(get_permalink(), strlen(home_url('/'))); // path of page after base URL

if (!( is_singular( 'locations' ) ) ) {

// loop through the alternative languages, and get the appropriate hreflang tag for each that exists
foreach ($alt_langs as $lang) {
$updated_url_lang_path = $site_url . $lang . '/' . $page_path;
$url_headers = @get_headers($updated_url_lang_path);
if($url_headers && strpos( $url_headers[0], '200')) {
if ($lang == 'uk') {
echo '<link rel="alternate" href="' . $updated_url_lang_path . '" hreflang="en-gb" />'. PHP_EOL;
} elseif ($lang == '') {

}
else {
echo '<link rel="alternate" href="' . $updated_url_lang_path . '" hreflang="en-' . $lang . '" />'. PHP_EOL;
}
}
}

// set primary as x-default
echo '<link rel="alternate" href="' . $site_url . $page_path . '" hreflang="x-default" />';

}
}

这段代码适用于主站的主页&示例页:www.example.com/features/;

<link rel="alternate" href="https://www.example.com/au/features/" hreflang="en-au" />
<link rel="alternate" href="https://www.example.com/uk/features/" hreflang="en-gb" />
<link rel="alternate" href="https://www.example.com/features/" hreflang="x-default" />

也适用于:

  • AU网站主页,
  • AU网站的功能页面:https://www.example.com/au/features/

但是在www.example.com/uk/上它只产生:

<link rel="alternate" href="https://www.example.com/au/" hreflang="en-au" />
<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />

缺少:

<link rel="alternate" href="https://www.example.com/uk/" hreflang="en-gb" />

功能页面是一个简单的WordPress页面。

帮助感激。

编辑

如果我添加if ($lang == 'uk') {print_r(get_headers($updated_url_lang_path));},我看到:

Array
(
[0] => HTTP/1.1 200 OK
[1] => Server: nginx
[2] => Date: Wed, 11 May 2022 22:08:04 GMT
[3] => Content-Type: text/html; charset=UTF-8
[4] => Content-Length: 88422
[5] => Connection: close
[6] => Vary: Accept-Encoding
[7] => Vary: Accept-Encoding
[8] => Accept-CH: Sec-CH-UA-Mobile
[9] => Link: <https://www.example.com/uk/wp-json/>; rel="https://api.w.org/"
[10] => Link: <https://www.example.com/uk/wp-json/wp/v2/pages/10>; rel="alternate"; type="application/json"
[11] => Link: <https://www.example.com/uk/>; rel=shortlink
[12] => X-Powered-By: WP Engine
[13] => X-Cacheable: SHORT
[14] => Vary: Accept-Encoding,Cookie
[15] => Cache-Control: max-age=600, must-revalidate
[16] => X-Cache: HIT: 8
[17] => X-Cache-Group: normal
[18] => Accept-Ranges: bytes
[19] => X-Orig-Cache-Control: no-cache
)

和以下内容正确添加:

<link rel="alternate" href="https://www.example.com/uk/" hreflang="en-gb" />

但是,我只在登录WordPress时看到这个。

在隐身窗口中,在https://www.example.com/uk/,我看到(只):

<link rel="alternate" href="https://www.example.com/" hreflang="x-default" />

我把代码改成:

function mm_add_hreflang_attribute() {
if (!( is_singular( 'locations' ) ) ) {
$sites = array(
array('', 'x-default'),
array('en-gb/', 'en-gb'),
array('en-au/', 'en-au'),
);

if ( is_post_type_archive('locations') ) {
foreach ( $sites as $site ) {
$site_url = network_site_url();
$page_path = 'locations/';
$geo_url = $site[0];
$hreflang = $site[1];
$url = $site_url . $geo_url . $page_path;
echo '<link rel="alternate" href="' . $url . '" hreflang="' . $hreflang . '" />'. PHP_EOL;
}
} else {
foreach ( $sites as $site ) {
$site_url = network_site_url();
$page_path = substr(get_permalink(), strlen(home_url('/')));
$geo_url = $site[0];
$hreflang = $site[1];
$url = $site_url . $geo_url . $page_path;
echo '<link rel="alternate" href="' . $url . '" hreflang="' . $hreflang . '" />'. PHP_EOL;
}
}
}
}
add_action('wp_head', 'mm_add_hreflang_attribute', 1);

运行良好

嘿,Steve,使用这个代码,它会工作得很好!

function mm_add_hreflang_attribute() {
if (!( is_singular( 'locations' ) ) ) {
$sites = array(
array('', 'x-default'),
array('en-gb/', 'en-gb'),
array('en-au/', 'en-au'),
);

if ( is_post_type_archive('locations') ) {
foreach ( $sites as $site ) {
$site_url = network_site_url();
$page_path = 'locations/';
$geo_url = $site[0];
$hreflang = $site[1];
$url = $site_url . $geo_url . $page_path;
echo '<link rel="alternate" href="' . $url . '" hreflang="' . $hreflang . '" />'. PHP_EOL;
}
} 
else 
{
foreach ( $sites as $site ) {
$site_url = network_site_url();
$page_path = substr(get_permalink(), strlen(home_url('/')));
$geo_url = $site[0];
$hreflang = $site[1];
$url = $site_url . $geo_url . $page_path;
echo '<link rel="alternate" href="' . $url . '" hreflang="' . $hreflang . '" />'. PHP_EOL;
}
}
}
}
add_action('wp_head', 'mm_add_hreflang_attribute', 1);

最新更新