BloInfo(‘home’)与home_url()和site_url()之间的区别

时间:2013-01-27 作者:Lenin

我一直在阅读Codex和其他SO和SE的帖子。但我很困惑。

我使用home\\u url()和site\\u url()来链接站点的主页,它给出了相同的结果。

因为我正在使用qTranslate进行双语实现。还有它的语言切换器。

稍后单击主页徽标时找到(已使用home_url()site_url()) 当前语言没有持续使用。因为,我使用一种语言作为默认语言,它只会生成http://example.com 对于其他语言来说http://example.com/ar

后来我发现,使用bloginfo(\'home\') 解决它。url现在带有语言后缀和主url。

these posts 假设bloginfo()函数已被弃用。我真的很困惑。

3 个回复
最合适的回答,由SO网友:david.binda 整理而成

您的情况的不同之处在于将过滤器应用于这些函数的输出。

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.

SO网友:Ralf912

打开后端并转到设置/常规。您将看到输入字段:

第一个地址对应于site_url() 第二个是home_url()

那么为什么会有区别呢?因为WordPress可以从一个不同的网站开始,然后你的博客文章。例如,创建一个名为“homepage”的页面,并在“设置/常规”中的第二个输入字段中输入您的域和页面名(打开“永久链接”):http://www.example.com/homepage. 从现在开始,你的博客以“主页”开始,而不是以你的博客帖子列表开始。如果用户输入“http:/www.example”。在浏览器地址栏中,将显示“主页”页面(内存挂钩:home_url() 显示主页)。简而言之,此功能称为“静态frontpage”

站点url是WordPress安装的“域”,无论哪个页面或站点应显示为起始页/frontpage/主页。

bloginfo() 只是一个包装get_option(). 参数home 自版本2.2以来已弃用,支持siteurl.

  • wpurl -> site\\u url()
  • siteurl -> home\\u url()
因为这很混乱,所以最好使用函数调用site_url()home_url()

SO网友:WP-Rookie

避免使用不推荐的调用bloginfo(\'home\') 将新功能添加到qtranslate_core.php:

function qtrans_convertHomeURL($url, $what) {
    if($what==\'/\') return qtrans_convertURL($url);
    return $url;
}
和新过滤器qtranslate_hooks.php:

add_filter(\'home_url\', \'qtrans_convertHomeURL\', 10, 2);
这样就不需要进行其他更改。不是最好的解决方案,但在我的环境中有效。希望翻译作者不要为此而生气。

必须始终使用home_url(\'/\') 以这种方式在主题/插件中保持本地化。可以通过使用一些特殊参数而不是\'/\' 它永远不会被用作真正的地址。

测试日期WordPress 3.5.2 + qTranslate 2.5.35 + Responsive theme 1.9.3.2.

结束