如何覆盖WP插件(WPML)的功能代码?

时间:2016-02-29 22:48:12

标签: function replace wordpress-plugin wpml location-href

我需要帮助,请覆盖输出rel-alternate-hreflang标签的WPML函数。理想情况下,你会给我一个函数,我可以放在我的孩子主题function.php文件中。

我使用流行的WPML(WordPress多语言)插件来管理WP Multi站点上的多种语言。我有一个英语和法语的网站(加拿大),以及英语和西班牙语的其他网站(美国)。我想告诉Google有关实现rel-alternate-hreflang标记的其他网站。这应该有助于Google将加拿大人引导至加拿大的同等页面,反之亦然。目前,WPML插件(管理多站点中的BOTH站点)输出......

在美国网站上....

<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对美国页面名称网址就是一个简单的计算。

在美国网站上....

<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请求技术支持,但没有得到我希望的帮助。所以我找到了在文件&#34; wp-content / plugins / sitepress-multilingual-cms / sitepress.class.php&#34;中创建此输出的函数。随着插件定期更新,我不想破解此文件。所以希望我们可以覆盖它,如果可能的话。请注意,同样的脚本输出美国和加拿大的输出,所以在计算CAN与USA等效页面之前,我们还需要先确定它创建的输出。

功能代码如下所示......

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( '&amp;', '&', $alternate_hreflang ) );
        }
    }
}

可以这样做吗? 或者我想知道是否有办法用jQuery找到这些标签,获取页面链接,添加&#34; / ca&#34;或删除它并插入额外的标签与相应的hreflang。但这是一个我怀疑的不同帖子的问题。我的想法是我正在寻找的上述解决方案将是一个更好的方法。

感谢您的协助!

1 个答案:

答案 0 :(得分:0)

您可以删除此功能的执行:

remove_action('wp_head', array("SitePress","head_langs"))

然后注册您自己的功能

add_action("wp_head","my_own_head_langs_fn");
function my_own_head_langs_fn() {
// paste here your modified version of head_langs
}