web-dev-qa-db-de.com

Unterschied zwischen bloginfo ('home') und home_url () und site_url ()

Ich habe Codex und andere SO- und SE-Posts zu diesem Thema gelesen. Aber ich bin verwirrt.

Ich habe home_url () und site_url () verwendet, um die Homepage der Site zu verknüpfen, und es wurden dieselben Ergebnisse erzielt.

Da ich qTranslate für die zweisprachige Implementierung verwendet habe. Und hatte seine Sprachumschalter.

Später gefunden, als auf das Home-Logo (verwendet home_url() und site_url()) geklickt wurde, blieb die aktuelle Sprache nicht erhalten. Weil ich eine Sprache als Standard verwende und die nur http://example.com produzieren würde, und für eine andere Sprache wäre es http://example.com/ar

Später fand ich heraus, dass bloginfo('home') es löst. Die URL trägt jetzt das Sprachensuffix mit der Heimat-URL.

Da diese Posts sagen, dass die bloginfo () -Funktionen veraltet sind. Ich bin ziemlich verwirrt.

4
Lenin

Der Unterschied in Ihrem Fall besteht darin, dass Filter auf die Ausgabe dieser Funktionen angewendet werden.

Während bloginfo einen dieser Filter anwendet:

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

Die Funktion home_url wendet diesen Filter an:

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

Adn endlich site_url wendet diesen Filter an:

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

Es stimmt, dass bloginfo eine der genannten Funktionen verwendet (home_url und site_url). Aus dem Quellcode geht Folgendes hervor:

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;
...

Aus diesem Code geht hervor, dass beim Aufrufen von bloginfo ('home_url') oder bloginfo ('site_url') alle genannten Filter angewendet wurden. Beim Aufrufen von home_url oder site_url werden die Filter von bloginfo nicht angewendet.

Die Sache ist, dass qTranslate wahrscheinlich nur die Filter von bloginfo einbindet .

4
david.binda

Öffnen Sie Ihr Backend und gehen Sie zu Einstellungen/Allgemein. Sie werden sehen, um Felder einzugeben:

  • WordPress-Adresse (URL)
  • Site-Adresse (URL)

Der erste entspricht site_url() und der zweite home_url()

Warum gibt es da einen Unterschied? Weil WordPress von einer anderen Seite als Ihren Blog-Posts starten kann. Erstellen Sie beispielsweise eine Seite mit dem Namen "Homepage" und geben Sie in das zweite Eingabefeld unter "Einstellungen"/"Allgemein" Ihre Domain und den Seitennamen (mit eingeschalteten hübschen Permalinks) ein: http://www.example.com/homepage. Von nun an beginnt Ihr Blog mit "Homepage" anstelle der Liste mit Ihren Blog-Beiträgen. Wenn ein Benutzer "http: /www.example.com" in die Adressleiste des Browsers eingibt, wird die Seite "Homepage" angezeigt (ein Speicher-Hook: home_url() zeigt Ihnen die Homepage). Kurz gesagt, diese Funktion wird als "statische Frontpage" bezeichnet.

Die Site-URL ist die 'Domain' Ihrer WordPress-Installation, unabhängig davon, welche Seite oder Site als Startseite/Startseite/Homepage angezeigt werden soll.

bloginfo() ist nur ein Wrapper für get_option(). Der Parameter home ist seit Version 2.2 veraltet, und zwar zugunsten von siteurl.

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

Da dies verwirrend ist, ist es besser, die Funktionsaufrufe site_url() und home_url() zu verwenden.

2
Ralf912

Um zu vermeiden, dass veraltete Aufrufe verwendet werden, hat bloginfo('home') der Datei qtranslate_core.php eine neue Funktion hinzugefügt:

function qtrans_convertHomeURL($url, $what) {
    if($what=='/') return qtrans_convertURL($url);
    return $url;
}

und neuer Filter zu qtranslate_hooks.php :

add_filter('home_url', 'qtrans_convertHomeURL', 10, 2);

Auf diese Weise waren keine weiteren Änderungen erforderlich. Nicht die beste Lösung, hat aber in meinem Umfeld funktioniert. Hoffe, dass der Autor von qTranslate dafür nicht böse wird.

Muss home_url('/') immer auf diese Weise in Themes/Plugins verwenden, um die Lokalisierung aufrechtzuerhalten. Kann durch die Verwendung eines speziellen Parameters anstelle von '/' verbessert werden, der niemals als echte Adresse verwendet wird.

Getestet auf WordPress 3.5.2 + qTranslate 2.5.35 + Responsive theme 1.9.3.2.

1
WP-Rookie