Answers:
除了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()
上下文更改时的返回值。例如,使用esc_url_raw()
了DB使用或esc_attr()
或esc_url()
为HTML。
更新资料
所示的示例应创建一个绝对URI(包含方案和主机),该示例不适用于带有子目录的多站点,因为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中的端口,用户或密码,因此这足够了。
global $wp;
$current_url = add_query_arg( $wp->query_string, '', home_url( $wp->request ) );
不是功能,而是一定要使用wordpress代码。
year
的参数被添加到查询字符串中,即使它们以前从未出现过,其他参数(例如,replytocom
参数)也丢失了。您知道解决方案吗?
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/htdocs
Windows中。
3)$_SERVER['HTTP_HOST']
–返回在http标头中找到的主机名。此变量通常返回路径,就像在浏览器的地址栏中example.com
找到时一样,http://example.com
并www.example.com
在您http://www.example.com
在地址栏中看到时返回。当您使用PHP进行在线付款时必须保留会话时,这非常有用,因为存储的会话http://example.com
与的会话不同http://www.example.com
。
4)$_SERVER['HTTP_USER_AGENT']
-返回访问网页的用户代理(浏览器)详细信息。我们可以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']
–如果查询字符串用于访问当前正在执行的脚本,则返回查询字符串。查询字符串是那些在“?”之后可用的字符串 sign。如果您$_SERVER['QUERY_STRING']
在脚本中使用脚本执行以下URL,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.php
在Linux中的路径和D:/xampp/xampp/htdocs/test/example.php
在Windows中的路径。
wp_guess_url是您要寻找的。
猜猜网站的URL。
将删除wp-admin链接以仅检索不在wp-admin目录中的返回URL。
add_query_args( null, null )
会创建一个带有空键($qs[""] = null
)的数组元素,尽管它不会影响结果。
根据add_query_arg()| 功能介绍 WordPress开发人员资源,第二,第三参数是可选的,可以省略。
add_query_args( null, null )
可以更短一些。
$current_url = add_query_args( [] );
还有一个最短的版本,尽管不建议使用,因为第一个参数是必需参数。
$current_url = add_query_args();
此外,请注意,当将WordPress安装在子目录中时,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
我的版本基于David的解决方案以获取绝对URL。
$parts = parse_url(home_url());
$uri = $parts['scheme'] . '://' . $parts['host'];
if (array_key_exists('port', $parts)) {
$uri .= ':' . $parts['port'];
}
$uri .= add_query_arg([]);
对我来说<?php esc_url(the_permalink()); ?>
有效(在带有分页的存档页面上)。
the_permalink()
回显转义的永久链接,它不返回任何内容。在esc_url()
没有得到任何东西,如果它会,这将是一个转义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
the_permalink()
在循环内调用时不需要ID。
您可以使用wordpress函数获取当前页面网址
the_permalink()
这将为您返回当前页面的URL链接。
the_permalink()
将打印当前帖子的网址。但这不适用于其他请求,也不包含分页等变量。因此,@RenéSchubert一直在寻找答案。