我需要帮助,请覆盖输出 rel-alternate-hreflang 标记的 WPML 函数。理想情况下,您会为我提供一个可以放在我的子主题 function.php 文件中的函数。
我正在使用流行的 WPML(WordPress 多语言)插件来管理 WP Multi 站点上的多种语言。我有一个站点(加拿大)是英语和法语,另一个站点(美国)是英语和西班牙语。我想告诉谷歌关于实现 rel-alternate-hreflang 标签的其他网站。这应该有助于谷歌将加拿大人引导到加拿大的等效页面,反之亦然。目前 WPML 插件(管理多站点中的两个站点)输出...
在美国网站上......
<link rel="alternate" hreflang="en-US" href="http://siteaddress.com/pagename" />
<link rel="alternate" hreflang="es" href="http://siteaddress.com/es/spanishpagename" />
在加拿大网站上......
<link rel="alternate" hreflang="en-CA" href="http://siteaddress.com/ca/pagename" />
<link rel="alternate" hreflang="fr" href="http://siteaddress.com/es/spanishpagename" />
但我希望它输出......
(注意英文页面名称是相同的,唯一的区别是 /ca/。我无法对知道法语页面名称的美国站点或知道西班牙语的加拿大站点做任何事情页面名称。该信息在每个多站点数据库中都不可用。但是,一旦提取了 href 链接,CAN 与美国的页面名称 url 就是一个简单的计算)
在美国网站上......
<link rel="alternate" hreflang="en-US" href="http://siteaddress.com/pagename" />
<link rel="alternate" hreflang="es" href="http://siteaddress.com/es/spanishpagename" />
<link rel="alternate" hreflang="en-CA" href="http://siteaddress.com/ca/pagename" />
在加拿大网站上......
<link rel="alternate" hreflang="en-CA" href="http://siteaddress.com/ca/pagename" />
<link rel="alternate" hreflang="fr" href="http://siteaddress.com/es/spanishpagename" />
<link rel="alternate" hreflang="en-US" href="http://siteaddress.com/pagename" />
我尝试向 WPML 寻求技术支持,但没有得到我希望的帮助。所以我在文件“wp-content/plugins/sitepress-multilingual-cms/sitepress.class.php”中找到了创建这个输出的函数。我不想破解这个文件,因为插件会定期更新。所以希望我们可以覆盖它,如果可能的话。请注意,该脚本同时输出美国和加拿大的输出,因此我们还需要首先确定它正在创建哪个输出,然后才能计算 CAN 与美国的等效页面。
功能代码如下所示...
function head_langs()
{
$languages = $this->get_ls_languages( array( 'skip_missing' => true ) );
// If there are translations and is not paged content...
//Renders head alternate links only on certain conditions
$the_post = get_post();
$the_id = $the_post ? $the_post->ID : false;
$is_valid = count( $languages ) > 1 && !is_paged() && ( ( ( is_single() || is_page() ) && $the_id && get_post_status( $the_id ) == 'publish' ) || ( is_home() || is_front_page() || is_archive() ) );
if ( $is_valid ) {
foreach ( $languages as $code => $lang ) {
$alternate_hreflang = apply_filters( 'wpml_alternate_hreflang', $lang[ 'url' ], $code );
printf( '<link rel="alternate" hreflang="%s" href="%s" />' . PHP_EOL,
$this->get_language_tag( $code ),
str_replace( '&', '&', $alternate_hreflang ) );
}
}
}
这可以做到吗? 或者,我想知道是否有办法使用 jQuery 找到这些标签,获取页面链接,添加“/ca”或删除它并插入带有相应 hreflang 的额外标签。但这是我怀疑的另一篇文章的问题。我的想法是我正在寻找的上述解决方案将是一个更好的方法。
感谢你的协助!