web-dev-qa-db-ja.com

現在のページのURLを取得する(ページネーションを含む)

現在のページの正しいURLを自動的に取得するためのWP関数はありますか? 1つの投稿を開いたばかりの場合、この関数はget_permalink()と同じ値を返しますが、ページのページ番号付きインスタンスの場合(コメントを介してページ番号を付ける場合)、関数はget_pagenum_link(get_query_var('paged'))と同じ結果を返します。

コーデックスを検索しましたが、探しているものが見つかりませんでした。 (しかしget_pagenum_link()でさえ文書化されていません。)

この関数 については知っていますが、その仕事をする「ネイティブな」WP関数があったら嬉しいです。

前もって感謝します!よろしく、ルネ

12
René Schubert

Rajeev Vyasの答えに加えて、空でないパラメータをadd_query_arg()に渡す必要はありません。以下は私にとっていつもうまくいっています:

// relative current URI:
$current_rel_uri = add_query_arg( NULL, NULL );

// absolute current URI (on single site):
$current_uri = home_url( add_query_arg( NULL, NULL ) );

関数は$_SERVER[ 'REQUEST_URI' ]にフォールバックし、それにurlencode_deep()を適用します。 https://github.com/WordPress/WordPress/blob/3.8/wp-includes/functions.php#L673 を参照してください。

編集: $_SERVER[ 'REQUEST_URI' ]はフィルタ処理されていないユーザ入力を表すので、コンテキストが変更されたときは常にadd_query_arg()の戻り値をエスケープする必要があります。たとえば、DBを使用する場合はesc_url_raw()、HTMLを使用する場合はesc_attr()またはesc_url()を使用します。

更新

home_url()はパスセグメントを含む完全なURIを返すので、絶対スキーム(スキームとホストを含​​む)を作成すべき示された例はサブディレクトリを持つマルチサイトでは動作しません。マルチサイト対応のコードのためのより良い解決策はこれでしょう:

// absolute URI in multisite aware environment
$parts = parse_url( home_url() );
$current_uri = "{$parts['scheme']}://{$parts['Host']}" . add_query_arg( NULL, NULL );

WordPressコアはマルチサイトのサイトURLでポート、ユーザー、パスワードをサポートしていませんので、これで十分です。

22
David
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );

機能ではありませんが、間違いなくワードプレスコードを使用します。

http://kovshenin.com/2012/current-url-in-wordpress/ /

3
Rajeev Vyas

1)$_SERVER['REQUEST_URI']-スクリプトを実行しているページにアクセスするためのURLを返します。ページにアクセスするためにhttp://www.example.com/product.php?id=5と入力する必要がある場合、$_SERVER['REQUEST_URI']/product.php?id=5を返します。

2)$_SERVER['DOCUMENT_ROOT'] –サーバーの構成ファイルで指定されたサーバーのルートディレクトリを返します。この変数は通常、Linuxでは/usr/yoursite/www、WindowsではD:/xamps/xampp/htdocsなどのパスを返します。

3)$_SERVER['HTTP_Host'] – httpヘッダーにあるホストの名前を返します。この変数は通常、ブラウザのアドレスバーにexample.comが見つかったときにhttp://example.comのようなパスを返し、アドレスバーにwww.example.comが表示されたときにhttp://www.example.comを返します。 http://example.comに保存されたセッションはhttp://www.example.comのセッションと同じではないため、PHPを使用してオンライン支払いを行いながらセッションを保持する必要がある場合、これは非常に便利です。

4)$_SERVER['HTTP_USER_AGENT']-Webページにアクセスしているユーザーエージェント(ブラウザー)の詳細を返します。 strpos($_SERVER["HTTP_USER_AGENT"],”MSIE”)を使用してMicrosoft Internet Explorerを検出するか、strpos($_SERVER["HTTP_USER_AGENT"],”Firefox”)を使用してPHPでfirefoxブラウザーを検出できます。

5)$_SERVER['PHP_SELF']-現在実行中のスクリプトのファイル名を返します。 URL http://www.example.com/product.php?id=5にアクセスし、$_SERVER['PHP_SELF']がスクリプトで/product.phpを返すとします。

6)$_SERVER['QUERY_STRING'] –現在実行中のスクリプトへのアクセスにクエリ文字列が使用されている場合、クエリ文字列を返します。クエリ文字列は、「?」記号の後に使用できる文字列です。次のURL $_SERVER['QUERY_STRING']を実行するスクリプトでhttp://www.example.com/index.php?id=5&page=productを使用すると、スクリプトでid=5&page=productが返されます。

7)$_SERVER['REMOTE_ADDR'] –現在のページにアクセスしているリモートマシンのIPアドレスを返します。ただし、$_SERVER['REMOTE_ADDR']に頼ってクライアントのマシンの実際のIPアドレスを取得することはできません。 PHPで実際のIPアドレスを取得する方法については、この記事を参照してください。

8)$_SERVER['SCRIPT_FILENAME']-現在実行中のファイルの絶対パスを返します。 Linuxではvar/example.com/www/product.phpのようなパスを返し、WindowsではD:/xampp/xampp/htdocs/test/example.phpのようなパスを返します。

0
Foxsk8

私にとっては<?php esc_url(the_permalink()); ?>は動作します(ページネーションのあるアーカイブページで)。

0
Henning Fischer

add_query_args( null, null ) 空のキー $qs[""] = null)を持つ配列要素を作成しますが、結果には影響しません。


に従ってadd_query_arg()|機能| WordPress開発者用リソース 、2番目、3番目のパラメータはオプションであり、省略可能です。

add_query_args( null, null ) より短く になります。

$current_url = add_query_args( [] );

最短バージョン もありますが、1番目のパラメーターが必須パラメーターなのでお勧めできません。

$current_url = add_query_args();

さらに、WordPressがサブディレクトリにインストールされている場合、home_url( add_query_vars( [] ) )home_url( add_query_arg( null, null ) ) の両方が実際のURL を返さないことがあります。

例えばWordPressがhttps://example.com/wp/wp/fooにインストールされている場合、https://example.com/wp/が返されることがあります。


更新:2017/01/23

私のバージョンは、絶対URLを取得するためのDavidのソリューションに基づいています。

$parts = parse_url(home_url());
$uri   = $parts['scheme'] . '://' . $parts['Host'];

if (array_key_exists('port', $parts)) {
    $uri .= ':' . $parts['port'];
}

$uri .= add_query_arg([]);
0
Whizark

wp_guess_url はあなたが探しているものです。

サイトのURLを推測します。

Wp-adminディレクトリにない戻りURLのみを取得するために、wp-adminリンクを削除します。

0
Jesse