问题描述

这是我使用的代码:

<?php echo str_replace( home_url(), '', get_permalink($post->ID) ); ?>

它的作用是输出固定链接作为相对 URL,即只有 s lug 。例如,如果固定链接是 http://example.com/2012/01/post-title/,代码输出的相对 URL 看起来像/2012/01/post-title/

问题:所有帖子和页面显示正确的永久链接,这是伟大的。但所有其他页面 (包括主页,搜索和归档) 都会显示第一篇文章的相对 URL,而不是相应页面的相对 URL 。任何想法为什么?我在这里做错了什么?

参考:Get page permalink without wpurl


编辑:这是我试过的还有什么:

在 functions.php

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

在 header.php

<link rel="alternate" hreflang="en-IN" href="http://in.example.com/<?php%20echo%20get_relative_permalink();%20?>" />

同样的问题也是这样。但是这也显示了一个 not-so-informative 错误。

最佳解决方案

使用 $_SERVER['REQUEST_URI']代替 get_permalink()来获取当前的 URL 。

例如如 example.com/test/page echo $_SERVER['REQUEST_URI']; 打印/test/page

次佳解决方案

我用

str_replace(home_url(), '', get_permalink());

如果站点根目录不是/

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。