web-dev-qa-db-ja.com

表示されているページのURLを取得する方法

私のサイトのページが私のブラウザにロードされるときはいつでも、そのページのURLがスクリーンにエコーされることを確実にするために私はカスタムPHPコードを加えたいです。私はecho get_permalink()を使うことができますが、それはすべてのページでうまくいくわけではありません。いくつかのページ(例えば 私のホームページ )はいくつかの投稿を表示します、そして私がこれらのページでget_permalink()を使用する場合、表示されたページのURLは返されませんこれらのページで、URLを返すにはどうすればいいですか。

ループが実行される前に起動する特定のフックにget_permalink()を付けることができますか?それともどういうわけか私はループから抜け出すことができますか、それが完了したらそれをリセットしますか?

ありがとう。

43
cag8f

get_permalink()は単一のページと投稿に本当に役立つだけで、ループの中でのみ働きます。

私が見た最も簡単な方法はこれです:

global $wp;
echo home_url( $wp->request )

$wp->requestはURLのパス部分を含みます。 /path/to/pagehome_url()はSettings> GeneralでURLを出力しますが、それにパスを追加することができるので、このコードではホームURLにリクエストパスを追加します。

これはたぶんPlainに設定されたパーマリンクでは機能せず、クエリ文字列(URLの?foo=bar部分)を省くことになることに注意してください。

パーマリンクがplainに設定されているときにURLを取得するには、代わりにadd_query_arg()に渡すことで$wp->query_varsを使用できます。

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );

そして、これら2つの方法を組み合わせて、パーマリンクの設定に関係なく、クエリ文字列を含む現在のURLを取得することができます。

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );
71
Jacob Peattie

WordPressで現在のURL全体を取得するには、以下のコードを使用します。

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));

これは、クエリパラメータを含むフルパスを表示します。

6
rescue1155

次のコードは現在のURLを示します。

global $wp;
echo home_url($wp->request)

以下のコードを使用して、クエリパラメータとともに完全なURLを取得できます。

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));

これは、クエリパラメータを含むフルパスを表示します。すでにURLにある場合、これはクエリパラメータを保存します。

2
function current_location()
{
    if (isset($_SERVER['HTTPS']) &&
        ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) ||
        isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
        $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') {
        $protocol = 'https://';
    } else {
        $protocol = 'http://';
    }
    return $protocol . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'];
}

echo current_location();
1
Shree Sthapit

これは前述の例の改善された方法です。きれいなURLが有効になっている場合はうまくいきますが、 /page-slug /?param = 1 のようなクエリパラメータがある場合は破棄されます。

次の例は両方の場合に機能します。

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( 'permalink_structure' );

    if ( empty( $permalink ) ) {

        $query_args = $query['query'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )
0
tolginho