问题描述

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