问题描述
是否有 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。