【问题标题】:Multiple pages with same URL in WordPressWordPress中具有相同URL的多个页面
【发布时间】:2015-03-11 07:12:36
【问题描述】:

我有一个 WordPress 网站,它有一个名为 Places with URL 的标准页面

example.com/places/

我有几个由城市调用的子页面

example.com/places/city-1
example.com/places/city-2

现在,我有一个自定义帖子类型 Place,它应该指示一个地方,并且应该有像

这样的永久链接
example.com/places/place-1

但是,如果我使用 city-1, city-2 转到之前的链接之一,显然我会得到 404,因为该永久链接没有 place

有没有办法让 WordPress 退回到以前的永久链接。因此,如果没有带有该名称的 place,请查找带有该名称的 page

【问题讨论】:

  • 路由的工作方式不允许这样做。它基本上是一个正则表达式模式列表,在您的情况下它们重叠,因此列表中的第一个将匹配。在此列表的开头添加了自定义帖子类型模式。完成这项工作的唯一方法是添加自定义路线/模式并自行处理,决定要显示的内容。因此,请查看 add_rewrite_rule,在插件中捕获该路线,然后将全局 $wp_query 设置为您需要的。

标签: php wordpress


【解决方案1】:

您可能可以使用PHP server variable $_SERVER 中的REFERER-值,但它不是很可靠并且可以更改。

我在我正在维护的一个页面中使用the plugin "Permalink Finder",这对于查找更改的 URL 非常有效。你可以试一试,看看它是否也适合你。

【讨论】:

    【解决方案2】:

    如果有人遇到类似问题,可以使用详细的页面规则来解决。这是我在 WordPress Stack Exchange 找到的一个示例 https://wordpress.stackexchange.com/questions/22438/how-to-make-pages-slug-have-priority-over-any-other-taxonomies-like-custom-post

    add_action( 'init', 'wpse16902_init' );
    function wpse16902_init() {
        $GLOBALS['wp_rewrite']->use_verbose_page_rules = true;
    }
    
    add_filter( 'page_rewrite_rules',     'wpse16902_collect_page_rewrite_rules' );
    function wpse16902_collect_page_rewrite_rules( $page_rewrite_rules )
    {
        $GLOBALS['wpse16902_page_rewrite_rules'] = $page_rewrite_rules;
        return array();
    }
    
    add_filter( 'rewrite_rules_array',     'wspe16902_prepend_page_rewrite_rules' );
    function wspe16902_prepend_page_rewrite_rules( $rewrite_rules )
    {
        return $GLOBALS['wpse16902_page_rewrite_rules'] + $rewrite_rules;
    }
    

    【讨论】:

      猜你喜欢
      • 2023-04-09
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多