非唯一术语slug,或者我可用于构建特定页面和固定链接的任何其他内容?

时间:2016-04-17 16:29:48

标签: wordpress url-rewriting permalinks custom-fields slug

我的项目是商家信息的目录。

单个列表网址看起来就像 domain.com/five-star-cars 一样简单 - 这是WordPress开箱即用的东西。

但我在深入研究基于地区的档案时遇到了问题。我们需要一个特定的URL结构。例如,如果我们想要显示俄亥俄州的所有商家信息,我们需要 domain.com/ohio - 也很简单。

但是,如果我们想要显示在俄亥俄州克里夫兰市和内华达州克里夫兰市的所有房源 - 我们希望这样做:

  • domain.com/cleveland/oh
  • domain.com/cleveland/nd

所以我创建了一个CPT“列表”和一个自定义分类“位置”。我将俄亥俄州和内华达州作为父母条款加入,并将克利夫兰作为孩子加入。

问题在于:第一克利夫兰的slu is是 domain.com/location/ohio/cleveland / ,但第二个成为 domain.com/location/nevada/cleveland-nevada /

我发现术语slug必须是唯一的,所以这是一个问题 - 我不能使用term slugs来构建URL。

我接下来要做的是将州和城市保存为每个列表中的自定义字段值。现在,我可以通过以下方式使用这些值(与术语slug不同,不必是唯一的)作为全局变量:

function loc_global_vars() {
 global $wp_query;
 $postid = $wp_query->post->ID;
 global $loc_vars;
 $loc_vars = array(
    'state'     => get_post_meta($postid, 'state', true),
    'city'      => get_post_meta($postid, 'city', true),
);
}
add_action( 'parse_query', 'loc_global_vars' );

但现在我被困住了:接下来的步骤是什么?

Q1 :如何使用这些变量构建存档页面和永久链接?

Q2 :如何构建模板以便我能够为每种存档类型自定义模板?

还是有什么明显的我错过了,我只是在寻找一个错误的方向? 所以,一般来说:

Q3 :有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用Rewrite API,您可以使用post meta来构建网址。

1)通过add_rewrite_tag()

添加您的帖子元词

2)设置add_rewrite_rule('([^/]+)/?','index.php?state=$matches[1]&city=$matches[2]','top');

3)设置挂钩后刷新重写规则,例如保存永久链接设置@ /wp-admin/options-permalink.php

写了here

解决Q3问题,您可以使用WP路由系统Cortex

或者,不那么不优雅的解决方案,为什么不创建两个自定义帖子类型,一个用于城市,一个用于区域,以及自定义税收以将城市放在区域页面上?