web-dev-qa-db-fra.com

Différence entre bloginfo ('home') et home_url () et site_url ()

J'ai lu des articles du Codex et d'autres SO et SE à ce sujet. Mais je suis confus.

J'ai utilisé home_url () et site_url () pour relier la maison du site et cela a donné les mêmes résultats.

Comme j'utilisais qTranslate pour une implémentation bilingue. Et avait son sélecteur de langue.

Trouvé plus tard, lorsque vous cliquez sur le logo de la maison (utilisé home_url() et site_url()), la langue actuelle ne persiste pas. Parce que, j’utilise une langue par défaut et qui produirait simplement http://example.com Et pour une autre langue ce serait http://example.com/ar

Plus tard, j'ai trouvé que, en utilisant bloginfo('home') le résout. L'URL porte maintenant le suffixe de langue avec l'URL de la maison.

Comme ces messages dites que les fonctions bloginfo () sont obsolètes. Je suis vraiment confus.

4
Lenin

La différence dans votre cas réside dans les filtres appliqués à la sortie de ces fonctions.

Alors que bloginfo applique l'un de ces filtres:

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

La fonction home_url applique ce filtre:

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

Enfin, site_url applique ce filtre:

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

Il est vrai que bloginfo utilise l'une des fonctions mentionnées (home_url et site_url). Il ressort clairement de son code source:

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

À partir de ce morceau de code, il est clair que, lorsque vous appelez bloginfo ('home_url') ou bloginfo ('site_url'), tous les filtres mentionnés sont appliqués. Lorsque vous appelez home_url ou site_url, les filtres de bloginfo ne sont pas appliqués.

Le problème est que qTranslate , probablement, ne croise que les filtres de bloginfo .

4
david.binda

Ouvrez votre backend et allez dans Paramètres/Général. Vous verrez pour saisir des champs:

  • Adresse WordPress (URL)
  • Adresse du site (URL)

Le premier correspond à site_url() et le second à home_url()

Alors pourquoi y a-t-il une différence? Parce que WordPress est capable de démarrer à partir d'un site différent de celui de votre blog. Par exemple, créez une page appelée "page d'accueil" et entrez dans le deuxième champ de saisie Paramètres/Général votre domaine et le nom de la page (avec de jolis permaliens activés): http://www.example.com/homepage. A partir de maintenant, votre blog commence par 'homepage' au lieu de la liste avec vos articles de blog. Si un utilisateur entre "http: /www.example.com" dans la barre d'adresse du navigateur, la page "page d'accueil" sera affichée (un crochet de mémoire: home_url() affiche la page d'accueil). En bref, cette fonctionnalité s'appelle 'frontpage statique'

L'URL du site est le "domaine" de votre installation WordPress, quelle que soit la page ou le site à afficher en tant que page de démarrage/page d'accueil/page d'accueil.

bloginfo() est juste un wrapper pour get_option(). Le paramètre home est déconseillé depuis la version 2.2 au profit de siteurl.

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

Parce que cela prête à confusion, il est préférable d’utiliser les appels de fonction site_url() et home_url().

2
Ralf912

Pour éviter l’appel obsolète, bloginfo('home') a ajouté une nouvelle fonction à qtranslate_core.php :

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

et nouveau filtre vers qtranslate_hooks.php :

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

De cette façon, aucun autre changement n'était nécessaire. Pas la meilleure solution mais a travaillé dans mon env. J'espère que l'auteur de qTranslate ne se mettra pas en colère pour cela.

Il faut toujours utiliser home_url('/') de cette façon dans les thèmes/plugins pour conserver la localisation. Peut être amélioré en utilisant un paramètre spécial au lieu de '/' qui ne sera jamais utilisé comme adresse réelle.

Testé sur WordPress 3.5.2 + qTranslate 2.5.35 + Responsive theme 1.9.3.2.

1
WP-Rookie