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


13

現在のページの正しいURLを自動的に取得するWP機能はありますか?つまり、1つの投稿を開いたばかりの場合、関数はと同じを返しget_permalink()ますが、ページのページ分割されたインスタンスを使用している場合(コメントをページ分割する場合)、関数は同じように返しますget_pagenum_link(get_query_var('paged'))

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

この機能については既に知っていますが、仕事をする「ネイティブ」なWP機能があれば嬉しいです。

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

回答:


27

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' ]フィルタリングされていないユーザーの入力を表し、1は常にの戻り値エスケープすべきadd_query_arg()コンテキストが変更されたときに。例えば、使用esc_url_raw()DBを使用するためまたはesc_attr()またはesc_url()HTMLについて。

更新

home_url()パスセグメントを含む完全なURIを返すため、絶対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のポート、ユーザー、またはパスワードをサポートしていないため、これで十分です。


OPがこの回答をソリューションとして選択しなかったことに不満がありました。ありがとうございました。
cfx

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

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

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


2
それは部分的には機能しますが、いくつかのことが私が望むように機能しません:のようなパラメーターyearはクエリ文字列に追加されますreplytocom。これに対する解決策を知っていますか?
ルネシューベルト

0

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

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

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

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']–現在実行中のスクリプトへのアクセスにクエリ文字列が使用されている場合、クエリ文字列を返します。クエリ文字列は、「?」の後に使用できる文字列です $_SERVER['QUERY_STRING']次のURLを実行するスクリプトでsign.ifを使用すると、スクリプト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']-現在実行中のファイルの絶対パスを返します。var/example.com/www/product.phpLinuxのようなパスD:/xampp/xampp/htdocs/test/example.phpとWindowsのようなパスを返します。


1
CLIではこれらのいずれも使用できないため、cronジョブには役に立たないことに注意してください。
カイザー14

0

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

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

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


これは、使用しようとしたときに、現在のページ以外のまったく異なるURLを返します。
カービー

0

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();

また、ノートその両方home_url( add_query_vars( [] ) )home_url( add_query_arg( null, null ) ) 実際のURLを返さない可能性がありますワードプレスをサブディレクトリにインストールされている場合。

たとえばhttps://example.com/wp/wp/foo、WordPressがにインストールされているときに返される場合があります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

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


不可能な。the_permalink()エスケープされたパーマリンクをエコーし​​ますが、何も返しません。esc_url()何を得ることはありませんし、それがならば、それはエスケープURLになります。
FUXIA

パーマリンクキャッシングが原因でのみ機能すると思います。
ヘニングフィッシャー

-1

改ページはできませんが、この関数を使用してループ内でURLを取得できます

<?php $ID = get_the_ID(); 
echo get_permalink( $ID ); ?>

または、PHPを使用したくない場合は、ここでjqueryメソッドを選択することもできます(これにより、ループの外側で機能するようになります)

$(document).ready(function () {
var vhref = $(location).attr('href');
var vTitle = $(this).attr('title');
$('#spnTitle').html('' + vTitle + '');
$('#spnURL').html('' + vhref + '');
});​

または、PHP関数を使用する場合は、ループ外でIDを取得する必要があります


1
申し訳ありませんが、これは私が求めたものではありません... + the_permalink()ループ内で呼び出されたときにIDは必要ありません。
ルネシューベルト

2
この回答は、元の質問とはほとんど関係がありませんでした。それは正しく答えなかったし、トピックに関する貴重な情報を本当に提供しなかった。
-jounileander

-2

wordpress関数を使用して、現在のページのURLを取得できます

the_permalink()

これにより、現在のページのURLリンクが返されます。


4
ほとんど; 現在の投稿のURL the_permalink()印刷します。ただし、他のリクエストでは機能せず、ページネーションなどの変数は含まれません。@RenéSchubertが探している答えではありません。
TheDeadMedic 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.