获取无域的永久链接(即获取相对永久链接)

时间:2012-08-28 作者:its_me

这是我正在使用的代码:

<?php echo str_replace( home_url(), \'\', get_permalink($post->ID) ); ?>
它所做的是将永久链接作为相对URL输出,即仅输出slug。例如,如果permalink是http://example.com/2012/01/post-title/, 代码输出的相对URL如下所示/2012/01/post-title/.

Problem: 所有的帖子和页面都显示了正确的永久链接,这很好。但所有其他页面(包括主页、搜索和归档)显示的是第一篇文章的相对URL,而不是相应页面的URL。知道为什么吗?我做错了什么?

Reference: Get page permalink without wpurl

<小时>EDIT: 以下是我尝试过的其他方法:

In functions.php

function get_relative_permalink( $url ) {
    $url = get_permalink();
    return str_replace( home_url(), "", $url );
}

In header.php

<link rel="alternate" hreflang="en-IN" href="http://in.example.com/<?php echo get_relative_permalink(); ?>" />
这也是同样的问题。但这一条也显示了一个信息量不大的错误。

3 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

使用$_SERVER[\'REQUEST_URI\'] 而不是get_permalink() 获取当前URL。get_permalink 将为您提供当前帖子的完整地址,而不是访问的URL地址。

e、 g.例如。com/测试/页面echo $_SERVER[\'REQUEST_URI\']; 印刷品/test/page

请注意,这不包括hashtag,因为该部分永远不会发送到服务器,它也不包括?foo=bar 类型参数,这些参数位于$_GET 大堆

SO网友:Tymek

我使用

str_replace(home_url(), \'\', get_permalink()); 
如果站点根不是/

SO网友:gregn3

这对我很有用:

function force_relative_url ($url)
{
    return preg_replace (\'/^(http)?s?:?\\/\\/[^\\/]*(\\/?.*)$/i\', \'$2\', \'\' . $url);
}
要在permalink上使用它,请执行以下操作:

$relative_permalink = force_relative_url (get_permalink ($post->ID));

结束

相关推荐

Page Name and Permalinks

我正在使用WordPress 3.2.1,刚刚在我的网站上添加了一个名为“中心管理”的页面,这反过来又创建了一个永久链接:http://localhost:8888/mysite/centre-management/对于我刚刚创建的页面。之后,我把这个页面弄得一团糟,想重新开始。因此,当我现在创建另一个与上述名称相同的新页面时,即“中心管理”,WordPress现在为我创建一个永久链接:‎http://localhost:8888/mysite/centre-管理-2/这不是我想要的。我希望它显示为:ht