获取带有普通固定链接的当前帖子/页面URL

时间:2019-05-20 作者:mrKC.988

我用它来解决这个问题:

$url = home_url( add_query_arg( array(), $wp->request ) );
然而,如果permalink很简单,那么我得到的只是主页url(而不是帖子url)。

那么,获取当前帖子或页面地址链接的最佳方式是什么?

3 个回复
SO网友:Derek Held

有什么原因吗get_permalink() 不适合你?我不清楚你为什么要手动构建它。

SO网友:Jacob Peattie

不使用get_permalink(). 该函数用于循环内部,仅用于获取到帖子的链接。它不适用于分类归档、日期归档、搜索结果或最新帖子页面。

通常,您可以使用home_url() 与…结合$wp->request:

global $wp;
echo home_url( $wp->request );
这是因为home_url() 从数据库获取网站URL,而$wp->request 保存当前请求的路径,该路径将是页面的slug、归档的日期等。

普通永久链接的问题是它们不使用请求路径,因为这需要标准。htaccess设置。相反,WordPress使用查询字符串来确定要加载的内容。

因此,您需要做的是获取当前查询变量并将这些变量附加到URL。谢天谢地,这些也可以在$wp, 具体为$wp->query_vars. 这是一个变量和值的数组,因此可以将其直接传递给add_query_arg();:

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

SO网友:mlimon

是的,这不适用于普通格式。而且还只是get_permalink() 也不会在这里解决你的问题。要解决您的问题,您需要首先更正页面/帖子id,WordPress default不提供任何功能。因此,您需要制作一个来获取正确的id。示例

/**
 * Get correct page or post id
 *
 * @return int
 */
if ( !function_exists( \'get_the_real_ID\' ) ) {
    function get_the_real_ID() {
      $post_id = 0;
      if (in_the_loop()) {
           $post_id = get_the_ID();
      } else {
        if ( is_front_page() && !is_home() ) {
            $frontpage_id = get_option( \'page_on_front\' );
            $post_id = $frontpage_id;
        } elseif ( !is_front_page() && is_home() ) {
            $page_for_posts = get_option( \'page_for_posts\' );
            $post_id = $page_for_posts;
        } else {
            global $wp_query;
            $page_object = $wp_query->get_queried_object();

            if ( is_page() || is_singular() ) {
                $post_id = $wp_query->get_queried_object_id();
            } else {
                $post_id = 0;
            }
        }
      }
      return $post_id;
    }
} 
现在只需使用这个ID就可以像这样获取您的页面/帖子url。

$id = get_the_real_ID();
$current_url = (empty($id)) ? home_url() : get_permalink($id);
我不确定这对你的情况是否是最好的或完美的解决方案,但至少它应该会像你预期的那样工作。我假设您可能会更改permalink格式,或者想要获取正确的url,无论使用何种格式?我和乌彭分享了这个方法。试着让我知道。

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。