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
钩看来我一定错过了一些明显的东西。
最合适的回答,由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 );