web-dev-qa-db-ja.com

Bloginfo( 'home')とhome_url()およびsite_url()の違い

これに関しては、Codexや他のSOやSEの記事を読んでいます。しかし、私は混乱しています。

私はhome_url()とsite_url()を使ってサイトのホームをリンクしましたが、同じ結果が得られました。

私はバイリンガルの実装にqTranslateを使っていました。そしてその言語スイッチャーを持っていました。

後で見つかった、ホームロゴをクリックしたとき(home_url()site_url()を使用)、現在の言語が持続しませんでした。なぜなら、私はデフォルトとして一つの言語を使っていて、それは単に http://example.com を生成するでしょうそしてそして他の言語のためにそれは http://example.com/ar になるでしょう

後になって、bloginfo('home')を使うことで解決できることがわかりました。これで、URLにホームURLの言語サフィックスが付きます。

As これらの投稿 はbloginfo()関数が非推奨であると言っています。私は本当に混乱しています。

4
Lenin

あなたの場合の違いはこれらの関数の出力に適用されているフィルタにあります。

Bloginfoはこれらのフィルタの1つを適用しますが:

if ( 'display' == $filter ) {
        if ( $url )
            $output = apply_filters('bloginfo_url', $output, $show);
        else
            $output = apply_filters('bloginfo', $output, $show);
    }

関数home_urlはこのフィルタを適用します。

return apply_filters( 'home_url', $url, $path, $orig_scheme, $blog_id );

Adn最後にsite_urlはこのフィルタを適用します。

return apply_filters( 'site_url', $url, $path, $scheme, $blog_id );

Bloginfoが言及された関数のうちの1つ(home_urlとsite_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_url')またはbloginfo( 'site_url')を呼び出すときに、前述のすべてのフィルタが適用されることは明らかです。 home_urlまたはsite_urlを呼び出すとき、bloginfoのフィルタは適用されません。

つまり、 qTranslate はbloginfoのフィルタ のみをフックするということです。

4
david.binda

バックエンドを開き、設定/一般に進みます。あなたはフィールドを入力するのを見るでしょう:

  • ワードプレスアドレス(URL)
  • サイトアドレス(URL)

最初のものはsite_url()に対応し、2番目のものはhome_url()に対応します

では、なぜ違いがあるのでしょうか。 WordPressはあなたのブログ投稿とは異なるサイトから始めることができるからです。たとえば、 'homepage'というページを作成し、Settings/Generalの2番目の入力フィールドに自分のドメインとページ名を入力します(かなりパーマリンクがオンになっている):http://www.example.com/homepage。今からあなたのブログはあなたのブログ記事のリストの代わりに 'ホームページ'で始まります。ユーザがブラウザのアドレスバーに「http:/www.example.com」と入力すると、「ホームページ」ページが表示されます(メモリフック:home_url()にホームページが表示されます)。つまり、この機能は「静的フロントページ」と呼ばれます。

サイトのURLは、スタートページ/フロントページ/ホームページとして表示されるページやサイトに関係なく、WordPressインストールの「ドメイン」です。

bloginfo()get_option()の単なるラッパーです。パラメータhomeは、バージョン2.2以降ではsiteurlのために使用されていません。

  • wpurl - > site_url()
  • siteurl - > home_url()

これは紛らわしいので、site_url()home_url()という関数呼び出しを使用することをお勧めします。

2
Ralf912

廃止予定の呼び出し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);

これにより、他の変更は不要になりました。最良の解決策ではありませんが、私の環境ではうまくいきました。 qTranslateの作者がこれに怒らないことを願っています。

ローカライズを維持するためにテーマ/プラグインでは常にhome_url('/')をこのように使わなければなりません。実アドレスとして使用されることはない'/'の代わりに特別なパラメータを使用することで改善できます。

WordPress 3.5.2 + qTranslate 2.5.35 + Responsive theme 1.9.3.2でテスト済み。

1
WP-Rookie