web-dev-qa-db-fra.com

esc_url renvoie une URL incorrecte

Quelle serait la raison pour que <?php echo esc_url( home_url( '/' ) ); ?> m'envoie à un site Web incorrect?

Je l'utilise dans ma barre de recherche et lorsque je recherche une valeur, il m'envoie sur l'un de mes autres sites Web, mais je ne suis pas sûr de ce que j'ai fait pour que cela se produise.

1
Jacob

Cela a fini par être quelque chose de très facile, mais quelque chose que j'ai négligé. Comme j'utilise toujours <?php get_search_form(); ?> pour mes formulaires de recherche, je suppose naturellement que, dans mon modèle de section pour la zone de recherche, je l'utilisais, mais ce n'était pas le cas.

J'ai construit le thème personnalisé à partir d'un autre thème que j'ai construit pour un site Web différent et, pour une raison quelconque, dans le action="" du formulaire, j'ai hardcode l'URL du premier site; c'est pourquoi j'ai continué à être transmis là-bas.

Je pensais avoir jeté un coup d'œil à la section, mais j'ai dû la négliger. Après deux jours environ, j'ai décidé de revérifier la section, grâce aux suggestions contenues dans les commentaires qui m'ont fait repenser le problème.

Alors oui, vraiment stupide péter au cerveau, mais il est maintenant résolu.

1
Jacob

Considérons le code suivant:

<form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">

home_url() est une fonction Wordpress qui récupère l'URL de la maison pour le site actuel. Lorsqu'il est appelé avec un argument optionnel $path, il renvoie l'URL de base avec l'argument optionnel $path ajouté.

Voici la définition de la fonction (de wp-includes/link-template.phpL # 1959 ):

function get_home_url( $blog_id = null, $path = '', $scheme = null ) {
    $orig_scheme = $scheme;

    if ( empty( $blog_id ) || !is_multisite() ) {
        $url = get_option( 'home' );
    } else {
        switch_to_blog( $blog_id );
        $url = get_option( 'home' );
        restore_current_blog();
    }

    if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ) ) ) {
        if ( is_ssl() && ! is_admin() && 'wp-login.php' !== $GLOBALS['pagenow'] )
            $scheme = 'https';
        else
            $scheme = parse_url( $url, PHP_URL_SCHEME );
    }

    $url = set_url_scheme( $url, $scheme );

    if ( $path && is_string( $path ) )
        $url .= '/' . ltrim( $path, '/' );

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

En gros, rien dans cette fonction ne permet de renvoyer une URL aléatoire de nulle part.

Lorsque de telles situations se produisent, la meilleure chose à faire est de grep votre code pour obtenir des indices.

Exécutez ceci dans un shell du répertoire d’installation root de Wordpress:

grep -nr "http://randomurl.com"

Ceci listera toutes les occurrences de http://randomurl.com dans votre base de code et montrera les fichiers dans lesquels elles apparaissent. S'il y a plusieurs occurrences, vous pouvez utiliser une recherche un peu plus avancée (en utilisant des options de ligne de commande telles que awk) pour voir laquelle causant des problèmes.

Note: Je sais que cela a déjà été résolu, mais cela pourrait être utile pour les futurs visiteurs, alors je le poste comme réponse :)

0
Amal Murali