获取当前页面的URL(包括分页)


13

是否有WP函数自动获取当前页面的正确URL?这意味着如果我只打开一个帖子,该函数将返回与相同的结果get_permalink(),但是如果我在页面的一个分页实例上(通过注释进行分页时),该函数将返回相同的get_pagenum_link(get_query_var('paged'))结果。

我已经搜索了抄本,但没有找到我想要的东西。(但get_pagenum_link()那里没有任何记录。)

我已经知道此功能,但是如果有一个“本机” WP功能可以完成工作,我将感到非常高兴。

提前致谢!问候,雷内

Answers:


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' ]代表未过滤的用户输入,因此应始终忽略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中的端口,用户或密码,因此这足够了。


令人沮丧的是,OP没有选择此答案作为“解决方案”。谢谢。
cfx

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

不是功能,而是一定要使用wordpress代码。

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.comwww.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中的路径。


1
请记住,这些都不在您的CLI中可用,因此对于cron作业无用。
kaiser 2014年

0

wp_guess_url是您要寻找的。

猜猜网站的URL。

将删除wp-admin链接以仅检索不在wp-admin目录中的返回URL。


当我尝试使用它时,它返回的URL与当前页面完全不同。
柯比2015年

0

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

0

对我来说<?php esc_url(the_permalink()); ?>有效(在带有分页的存档页面上)。


不可能。the_permalink()回显转义的永久链接,它不返回任何内容。在esc_url()没有得到任何东西,如果它会,这将是一个转义URL。
fuxia

您是对的,它起作用仅是因为我认为永久链接缓存。
Henning Fischer

-1

我现在没有分页功能,但是您可以使用此功能在循环中获取网址

<?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函数获取当前页面网址

the_permalink()

这将为您返回当前页面的URL链接。


4
几乎; the_permalink()打印当前帖子的网址。但这不适用于其他请求,也不包含分页等变量。因此,@RenéSchubert一直在寻找答案。
TheDeadMedic 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.