非唯一术语 slug,或者我可以用来构建特定页面和永久链接的其他任何东西?

Posted

技术标签:

【中文标题】非唯一术语 slug,或者我可以用来构建特定页面和永久链接的其他任何东西?【英文标题】:Non-unique term slugs, or anything else I can use to build specific pages and permalinks? 【发布时间】:2016-08-09 07:34:12 【问题描述】:

我的项目是一个企业列表目录。

个人列表 URL 看起来就像 domain.com/five-star-cars 一样简单 - WordPress 开箱即用地处理。

但是我在钻取基于区域的档案时遇到了问题。我们需要一个特定的 URL 结构。例如,如果我们想显示俄亥俄州的所有列表,我们需要 domain.com/ohio - 也很简单。

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

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

所以我创建了一个 CPT“列表”和一个自定义分类“位置”。我将俄亥俄州和内华达州添加为父项,并将克利夫兰添加为两者的子项。

这是问题所在:第一个克利夫兰的蛞蝓是 domain.com/location/ohio/cleveland/ 但第二个变成了 domain.com/location/nevada/cleveland-nevada /

我发现术语 slug 必须是唯一的,所以这是个问题 - 我不能使用术语 slug 来构建 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】:

使用Rewrite API,您可以使用您的帖子元构建网址。

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。

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

【讨论】:

州页面上不会有城市,只有整个州的列表和顶部的州特定描述,例如familydaysout.com/kids-things-to-do-usa/ohio @spnzr 你应该用例子来阐明你的答案。因为对于尚未弄清楚其工作原理的其他人来说,参考通常很难遵循。

以上是关于非唯一术语 slug,或者我可以用来构建特定页面和永久链接的其他任何东西?的主要内容,如果未能解决你的问题,请参考以下文章

无法获取术语或调用函数

Wordpress分类术语还有内容的仪表板页面?

Clickhouse中具有唯一和非唯一数据的频率直方图

拥有一个与自定义帖子类型“front”slug 标题相同的 WordPress 页面

wordpress:如何检查 slug 是不是包含特定单词?

django models.SlugField 怎么使用