如何获取当前页面显示的URL?

时间:2017-07-25 作者:cag8f

我想添加自定义PHP代码,以确保每当我的网站上的页面加载到我的浏览器中时,该页面的URL都会回显到屏幕上。我可以使用echo get_permalink(), 但这并不适用于所有页面。一些页面(例如。my homepage) 显示多个帖子,如果我使用get_permalink() 在这些页面上,不会返回显示页面的URL(我相信它会返回循环中最后一篇文章的URL)。对于这些页面,如何返回URL?

我可以附加吗get_permalink() 在循环执行之前触发的特定钩子?或者,我可以以某种方式打破循环,或者在循环完成后重置它吗?

谢谢

14 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

get_permalink() 只对单个页面和帖子真正有用,并且只在循环中有效。

我看到的最简单的方式是:

global $wp;
echo home_url( $wp->request )
$wp->request 包括URL的路径部分,例如。/path/to/pagehome_url() 在“设置”>“常规”中输出URL,但您可以向其附加路径,因此我们在代码中将请求路径附加到主URL。

请注意,这可能不适用于设置为Plain的Permalinks,并将保留查询字符串(?foo=bar URL的一部分)。

要在永久链接设置为普通时获取URL,可以使用$wp->query_vars 相反,通过将其传递给add_query_arg():

global $wp;
echo add_query_arg( $wp->query_vars, home_url() );
您可以结合使用这两种方法来获取当前URL,包括查询字符串,而不考虑永久链接设置:

global $wp;
echo add_query_arg( $wp->query_vars, home_url( $wp->request ) );

SO网友:rescue1155

您可以使用以下代码在WordPress中获取整个当前URL:

global $wp;
$current_url = home_url(add_query_arg(array(), $wp->request));
这将显示完整路径,包括查询参数。

SO网友:Dario Zadro

为什么不直接使用?

get_permalink( get_the_ID() );
这是针对单页的。

对于类别页面,请使用以下选项:

get_category_link( get_query_var( \'cat\' ) );
获取任何页面的当前URL的简单脚本:

// get current URL 
$current_url = get_permalink( get_the_ID() );
if( is_category() ) $current_url = get_category_link( get_query_var( \'cat\' ) );
echo $current_url;
      

SO网友:Adiyya Tadikamalla

以下代码将给出当前URL:

global $wp;
echo home_url($wp->request)
您可以使用以下代码获取完整的URL以及查询参数。

global $wp;  
$current_url = home_url(add_query_arg(array($_GET), $wp->request));
这将显示完整路径,包括查询参数。这将保留URL中已有的查询参数。

SO网友:Akmal

在我的情况下,此代码运行良好:

$current_url = home_url($_SERVER[\'REQUEST_URI\'])
我希望它能帮助别人,我尝试了所有的答案,但这一个是有帮助的。

SO网友:Shree Sthapit
function current_location()
{
    if (isset($_SERVER[\'HTTPS\']) &&
        ($_SERVER[\'HTTPS\'] == \'on\' || $_SERVER[\'HTTPS\'] == 1) ||
        isset($_SERVER[\'HTTP_X_FORWARDED_PROTO\']) &&
        $_SERVER[\'HTTP_X_FORWARDED_PROTO\'] == \'https\') {
        $protocol = \'https://\';
    } else {
        $protocol = \'http://\';
    }
    return $protocol . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\'];
}

echo current_location();
SO网友:Bawm
global $wp;
$wp->parse_request();
$current_url = home_url($wp->request);
SO网友:tolginho

这是前面提到的一种改进的示例方式。如果启用了漂亮的URL,它就会工作,但是如果有任何查询参数,如/page-slug/?param=1 或者URL很难看。

以下示例适用于这两种情况。

    $query_args = array();

    $query = wp_parse_url( $YOUR_URL );

    $permalink = get_option( \'permalink_structure\' );

    if ( empty( $permalink ) ) {

        $query_args = $query[\'query\'];

    }

    echo home_url( add_query_arg( $query_args , $wp->request ) )

SO网友:Flow

大概wp_guess_url() 是你需要的。自版本2.6.0起提供。

SO网友:Imran Zahoor

这就是对我有效的方法(简洁明了的解决方案,也包括URL中的查询字符串):

$current_url = add_query_arg( $_SERVER[\'QUERY_STRING\'], \'\', home_url( $wp->request ) );
输出URL如下所示

http://sometesturl.test/slug1/slug2?queryParam1=testing&queryParam2=123
解决方案取自here

SO网友:Hybrid Web Dev

我意识到这是一个老问题,但我注意到,没有人提到使用get_queried_object().

它是一个全局wp函数,可以获取与当前url相关的任何内容。例如,如果你在一个页面或帖子上,它将返回一个post对象。如果您在存档中,它将返回一个post类型的对象。

WP还具有一系列辅助函数,如get_post_type_archive_link 您可以将对象的“post type”字段指定给并返回其链接,如下所示

get_post_type_archive_link(get_queried_object()->name);
关键是,您不需要依赖上面的一些黑客答案,而是使用查询的对象来始终获得正确的url。

这也适用于多站点安装,无需额外工作,因为通过使用wp的功能,您总是可以获得正确的url。

SO网友:Rodgath

这里的解决方案都很好,但与本地和远程服务器环境都不一致。所以我想出了一个更简单、更简洁的解决方案regardless of the WordPress permalink settings.

function getCurrentUrl() {
    $protocol = is_ssl() ? \'https://\' : \'http://\';
    return ($protocol) . $_SERVER[\'HTTP_HOST\'] . $_SERVER[\'REQUEST_URI\'];
}
$currentUrl = getCurrentUrl();
echo $currentUrl;
输出将包括URL查询参数和slug。

SO网友:Ivan Ivan

WP更新了一些内容,现在property 全球要求$wp 默认情况下为空。必须调用特殊方法parse_request 在获取该属性的数据之前。

所以是这样的:

global $wp;
echo home_url( $wp->request );
现在应该是下一条路:

global $wp;
$wp->parse_request();
echo home_url( $wp->request );
另外,我想在最受欢迎的回复下发表评论,但我无权发表评论。

SO网友:Jonas Lundman

在对一项简单的任务进行了大量研究之后,以上所有答案的组合对我们很有用:

function get_wp_current_url(){
    global $wp;
    if(\'\' === get_option(\'permalink_structure\')) return home_url(add_query_arg(array($_GET), $wp->request));
        else return home_url(trailingslashit(add_query_arg(array($_GET), $wp->request)));
}
末尾没有缺少斜杠等等。作为关于输出当前url的问题id,这与安全性和其他内容无关。但是,在PHP中找不到结尾处类似散列的#注释。

结束

相关推荐

什么是phpBB?它是不是类似于我可以在WordPress中使用的插件?

我对phpBB做了一些研究。它说这是一个论坛插件,但没有提到这个插件可以在Wordpress中使用。然后我看到this forum 比较phpBB和Wordpress插件的地方(看起来两者仍然不同)。我在Wordpress开发StackExchange中看到了几个关于phpBB的问题,但没有一个回答我的问题。所以,如果我买this theme, 那么我可以在Wordpress中使用它吗?如果没有,那么哪个平台可以用来编辑主题?代码是PHP,还是可以使用HTML和CSS?对不起,问题太多了。