您的情况的不同之处在于将过滤器应用于这些函数的输出。
bloginfo应用以下过滤器之一:
if ( \'display\' == $filter ) {
if ( $url )
$output = apply_filters(\'bloginfo_url\', $output, $show);
else
$output = apply_filters(\'bloginfo\', $output, $show);
}
函数home\\u url应用此筛选器:
return apply_filters( \'home_url\', $url, $path, $orig_scheme, $blog_id );
Adn finally site\\u url应用此筛选器:
return apply_filters( \'site_url\', $url, $path, $scheme, $blog_id );
bloginfo确实使用了上述功能之一(home\\u url和site\\u url)。从其源代码可以清楚地看出:
function get_bloginfo( $show = \'\', $filter = \'raw\' ) {
switch( $show ) {
case \'home\' : // DEPRECATED
case \'siteurl\' : // DEPRECATED
_deprecated_argument( __FUNCTION__, \'2.2\', sprintf( __(\'The <code>%s</code> option is deprecated for the family of <code>bloginfo()</code> functions.\' ), $show ) . \' \' . sprintf( __( \'Use the <code>%s</code> option instead.\' ), \'url\' ) );
case \'url\' :
$output = home_url();
break;
case \'wpurl\' :
$output = site_url();
break;
...
从这段代码可以清楚地看出,当调用bloginfo(“home\\u url”)或bloginfo(“site\\u url”)时,所有提到的过滤器都会被应用。调用home\\u url或site\\u url时,不会应用bloginfo的筛选器。
问题是qTranslate, 可能hooks only bloginfo\'s filters.