問題描述

是否有 WP 功能自動獲取當前頁面的正確 URL?意思是,如果我剛剛打開一個帖子,該函數返回與 get_permalink()相同,但是如果我在一個頁面的分頁實例上 (當通過註釋分頁) 時,函數返回與 get_pagenum_link(get_query_var('paged'))相同的功能。

我搜查了鱈魚,但沒有找到我在尋找。 (但是 get_pagenum_link()甚至沒有記錄。)

我已經知道了 this function,但是如果有一個”native” WP 功能可以完成這項工作,我會很高興。

提前致謝!問候,雷內

最佳解決方案

除了 Rajeev Vyas 的答案,您不需要將任何 non-empty 參數傳遞給 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()的返回值。例如,使用 esc_url_raw() DB 數據庫或 esc_attr()esc_url()用於 HTML 。

更新

應該創建絕對 URI(包含方案和主機) 的示例在 sub-directories 的多站點上不起作用,因為 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 中的端口,用户或密碼,因此這應該是足夠的。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。