私のサイトのページが私のブラウザにロードされるときはいつでも、そのページのURLがスクリーンにエコーされることを確実にするために私はカスタムPHPコードを加えたいです。私はecho get_permalink()
を使うことができますが、それはすべてのページでうまくいくわけではありません。いくつかのページ(例えば 私のホームページ )はいくつかの投稿を表示します、そして私がこれらのページでget_permalink()
を使用する場合、表示されたページのURLは返されませんこれらのページで、URLを返すにはどうすればいいですか。
ループが実行される前に起動する特定のフックにget_permalink()
を付けることができますか?それともどういうわけか私はループから抜け出すことができますか、それが完了したらそれをリセットしますか?
ありがとう。
get_permalink()
は単一のページと投稿に本当に役立つだけで、ループの中でのみ働きます。
私が見た最も簡単な方法はこれです:
global $wp;
echo home_url( $wp->request )
$wp->request
はURLのパス部分を含みます。 /path/to/page
とhome_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 ) );
WordPressで現在のURL全体を取得するには、以下のコードを使用します。
global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));
これは、クエリパラメータを含むフルパスを表示します。
次のコードは現在のURLを示します。
global $wp;
echo home_url($wp->request)
以下のコードを使用して、クエリパラメータとともに完全なURLを取得できます。
global $wp;
$current_url = home_url(add_query_arg(array($_GET), $wp->request));
これは、クエリパラメータを含むフルパスを表示します。すでにURLにある場合、これはクエリパラメータを保存します。
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();
これは前述の例の改善された方法です。きれいな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 ) )