WPML
状态
已解决
报告针对
WPML Multilingual CMS 3.3.6
解决于
3.3.6

问题概述

页面头部可能缺少 hreflang meta 标签。自 WPML 3.3.6 起,在与过早加载 WPML 的主题或插件结合使用时,就会出现此问题。

WPML 应在您站点的头部区域包含 <link hreflang=”lang”> 标签。在使用 WPML 3.3.6 并结合某些插件或主题的一些站点中,缺少此标签。出现此问题的原因是,WPML 试图在头部尽早输出这些标签,但其他插件导致了竞争条件,从而过早触发了 WPML。您可能会收到来自 Google Webmaster tool 的电子邮件,提示“Incorrect hreflang implementation”。

有关此功能的完整说明,请参阅 Google 的语言和区域 URL 内容指南

临时解决方法

要在 WPML 3.3.6 中修复此问题:


  1. 打开文件 sitepress-multilingual-cms/sitepress.class.php

  2. 向下滚动到此文件的底部,您将看到以下内容: 屏幕截图 2016-02-24 10.47.11

  3. 替换此行: add_action( 'wp_head', array( $this, 'head_langs' ), 1 );

  4. 替换为: add_action( 'wp_head', array( $this, 'head_langs' ) );

  5. 此代码的最终版本必须如下所示: 屏幕截图 2016-02-24 11.00.04

  6. 保存文件

在下一个 WPML 版本中,将应用相同的修复。

第 3 步中的代码旨在尽可能早地输出 hreflang 元标记,但这会导致某些主题和插件出现问题。

如果您仍想尽可能早地输出 hreflang 元标记,可以应用更复杂的解决方案。将此代码添加到您主题的 functions.php 文件中:

function my_handle_head_hreflang() {
   global $sitepress;

   $settings = $sitepress->get_settings();
   if ( $settings[ 'seo' ][ 'head_langs' ] ) {
      remove_action( 'wp_head', array( $sitepress, 'head_langs' ) );
      add_action( 'wp_head', array( $this, 'head_langs' ), 1 );
   }
}

add_action('wpml_loaded', 'my_handle_head_hreflang');

所有已知问题 →