web-dev-qa-db-ja.com

esc_urlが誤ったURLを返す

<?php echo esc_url( home_url( '/' ) ); ?>が私を間違ったウェブサイトに案内しているのはなぜですか?

私は検索バーでそれを使用し、値を検索するとそれが他のWebサイトの1つに送信されますが、そのために何をしたのかわかりません。

1
Jacob

それは非常に簡単なものになってしまいましたが、私は見落としていました。私はいつも検索フォームに<?php get_search_form(); ?>を使っているので、私は検索領域のための私のセクションテンプレートでそれを使っていたと当然思いますが、そうではありませんでした。

私は別のウェブサイトのために構築した別のテーマからテーマのカスタムを構築し、何らかの理由でフォームのaction=""に最初のサイトのURLをハードコードしました。だからこそ私はそこに転送され続けました。

セクションをチェックしたと思いましたが、見落としていたに違いありません。 2日かそこらの後、私は私が問題を再考したコメントの提案のおかげで、セクションを再チェックすることにしました。

だから、本当に愚かな頭脳おならが、それは今解決されています。

1
Jacob

次のコードを見てください。

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

home_url() は、現在のサイトのホームURLを取得するWordpressの関数です。オプションの$path引数を指定して呼び出すと、オプションの$path引数が追加されたホームURLが返されます。

これが関数の定義です(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 );
}

基本的に、この関数にはどこにも存在しないランダムなURLを返すものは何もありません。

このような状況が発生したときに行うべき最善のことは、手がかりとしてあなたのコードをgrepすることです。

Wordpressのルートインストールディレクトリのシェルでこれを実行します。

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

これはあなたのコードベースでhttp://randomurl.comの全ての出現をリストし、それらが現れるファイルを示すでしょう。もし複数の出現があるなら、(awkのようなコマンドラインオプションを使って)もう少し高度な検索を使うことができます。トラブルを引き起こします。

注:これは既に解決されていますが、これは将来の訪問者に役立つ可能性があるため、回答として掲載しています:)

0
Amal Murali