基于Cookie值的自定义URL路由

时间:2018-03-24 作者:Ruben

我正在寻找以下场景的一些建议:我们将为一家在美国拥有多个地点的公司提供一个网站。一些页面特定于某个办公地点,而其他页面则通用于所有地点。

我正在考虑创建如下页面结构:

- Home (Generic)
- Locations
   - New York (This would be the New York office home page)
     - About US (Specific to the New York location)
     - Contact (Specific to the New York location)
   - Los Angeles
     - About US (Specific to the Los Angeles location)
     - Contact (Specific to the Los Angeles location)
- ... etc ...
当用户进入网站时,我想根据他们的IP地址猜测他们的大致位置。根据他们的位置,他们应该在最近的办公地点主页上结束,例如/locations/new-york.

我想在会话变量不存在时设置一个包含所选位置的会话变量,以便我可以将后续页面请求重定向到该位置的子页面。

我的主要问题是如何处理后续请求的路由。假设我有一个会话值,它包含所选位置的slug:

$_SESSION[\'location\'] = \'new-york\'
用户正在请求联系人页面:http://example.com/contact我需要使用什么钩子才能将URL重写为http://example.com/locations/new-york/contact 是否设置了会话变量?

1 个回复
SO网友:Tom J Nowell

会话变量不可靠,在某些WP主机上无法工作。更糟糕的是,您将阻止缓存

但更重要的是,不要路由,重定向!路由和重定向不是一回事

因此,我们需要以下逻辑:

template_redirect 如果用户在主页上,请执行操作is_home<电话wp_safe_redirect 重定向到最近的office页面呼叫exit当会话变量不存在且包含所选位置时,我希望设置会话变量,以便我可以将后续页面请求重定向到该位置的子页面。

但是你有他们的IP,你用它来确定他们的位置,为什么不直接用它呢?

用户正在请求联系人页面:http://example.com/contact 我需要使用什么钩子才能将URL重写为http://example.com/locations/new-york/contact 是否设置了会话变量?

当你说rewrite, 这与重定向不同。如果我访问example.com/foo, 它被重写为example.com/bar 在PHP中,它仍然会说/foo 在我的浏览器中。你还没有把我转移到/bar, 您已经更改了在上显示的内容/foo. Redirect 用户。

你可能会认为我在吹毛求疵,但重写是另一回事,使用不同的API集,它解决了一个完全不同的问题。布线也一样。Routing 找出给定的URL,我应该加载哪个代码。你的问题是“给定URL和位置,我应该在哪里redirect “用户”

因此,在联系人页面上,在输出任何HTML之前,测试用户位置和使用wp_safe_redirect 然后退出

结束

相关推荐

Debugging WP routing

对于一些帖子,我看到404页,即使存在帖子,在WP中使用永久链接决定需要呈现什么对象的位置在哪里?谢谢