Remove WPML's home_url filter

时间:2014-04-04 作者:helgatheviking

WPML插件筛选器的home_url 以提供特定于您所查看语言的主页链接。(因此,如果您正在阅读西班牙语页面,home\\u url()将指向http://example.com/es). 我需要为没有特定语言主页的网站禁用。所以我深入研究了WPML插件,它基本上是以一种典型的方式启动的:

global $sitepress;
$sitepress = new SitePress();
然后在类的构造函数中添加有问题的过滤器:

add_filter( \'home_url\', array( $this, \'home_url\' ), 1, 4 );
类的回调方法为(供参考):

// filter for WP home_url function
function home_url( $url, $path, $orig_scheme, $blog_id )
{
    // exception for get_page_num_link and language_negotiation_type = 3
    if ( $this->settings[ \'language_negotiation_type\' ] == 3 ) {
        $debug_backtrace = debug_backtrace();
        if ( !empty( $debug_backtrace[ 6 ] ) && $debug_backtrace[ 6 ][ \'function\' ] == \'get_pagenum_link\' )
            return $url;
    }

    remove_filter( \'home_url\', array( $this, \'home_url\' ), 1 );
    // only apply this for home url - not for posts or page permalinks since this filter is called there too
    if ( ( did_action( \'template_redirect\' ) && rtrim( $url, \'/\' ) == rtrim( get_home_url(), \'/\' ) ) || $path == \'/\' ) {
        $url = $this->convert_url( $url );
    }
    add_filter( \'home_url\', array( $this, \'home_url\' ), 1, 4 );

    return $url;
}
这似乎应该是remove_filter. 但是,在函数中添加以下内容。php(不可否认,它可能位于特定于站点的插件中)似乎没有删除过滤器和主徽标(使用home_url() 函数仍指向特定语言的主页)。

function rar_remove_wpml_home_filter(){
    global $sitepress;
    remove_filter( \'home_url\', array( $sitepress, \'home_url\' ), 1, 4 );
}
add_action( \'plugins_loaded\', \'rar_remove_wpml_home_filter\' );
我也试过在init 钩看来我一定错过了一些明显的东西。

4 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

我发现需要删除4个过滤器/操作才能撤消WPMLhome_url 修改因为我不知道这可能会破坏什么,我最终改变了我网站的徽标以使用site_url() 在我的例子中是相同的,但WPML没有改变。

function disable_things(){
    remove_filter( \'page_link\', array( $this, \'permalink_filter\' ), 1, 2 );
    remove_action( \'wp_head\', array( $this, \'front_end_js\' ) );
    remove_filter( \'feed_link\', array( $this, \'feed_link\' ) );
    remove_filter( \'home_url\', array( $this, \'home_url\' ), 1, 4 );
}
add_action( \'wp_head\', \'disable_things\', 20 );

SO网友:Pavol Caban

我就是这样做的。使用了WPML筛选器并返回了默认url,而不是经过筛选的url。

function custom_wpml_home_url( $home_url, $url, $path, $orig_scheme, $blog_id ) {
    return $url;
}
add_filter( \'wpml_get_home_url\', \'custom_wpml_home_url\', 99, 5 );

SO网友:Andrea Sciamanna

采取不同的方法怎么样?

保留过滤器,并在WPML->语言中选择“使用默认语言目录”。

您可以在那里指定静态文件或创建“根页面”。

此页面不会连接到任何语言。它甚至不会显示语言切换器(除非您使用自定义模板并使用代码)。

SO网友:Vuk Vukovic

你可以使用get_option( \'home\' );

它会在常规选项中为您返回博客的主web地址集。

结束

相关推荐

如何访问调用Apply_Filters()的函数中的变量?

我试图根据调用的函数中的变量是否apply_filters() 等于特定值。该变量不会传递给apply_filters() 参数。这或许可以解释我的意思:// function in wordpress core function get_var_b() { // generating $var_a $var_a = \"a\"; // some code ... $var_b = apply_filters(\'get_var_b\