多个分类,永久链接应该是什么样子?

时间:2014-06-09 作者:Toni Michel Caubet

我需要实现一个自定义post\\u类型的列表,该类型必须能够通过两种分类法对其进行过滤,

我发现this answer 这有助于解决问题wp_query 语法

我的问题是,现在,url应该是什么样子?

post\\u类型:ad 分类法是areacategory

当前帖子url为:

/category/bikes 威奇工程

/ads/area/area-5 威奇工程

但是我应该如何为过滤的页面生成slug呢category==bikesarea==area-5 ?

-编辑-

在wp之外,我会重写如下内容(对于本例):

/ads/(bikes|cars)/(area-5|area-3)

收件人:

/posts.php?type=ads&category=bikes&area=area-5

但我不知道如何在wp中解决这个问题

有什么想法吗?

谢谢

1 个回复
最合适的回答,由SO网友:gmazzap 整理而成

今天刚刚发布了一个名为Cortex, 免费提供于GitHub. 你需要PHP 5.4+Composer 要安装它(docs).

此插件允许为查询编写自定义“路由”,它基于Symfony routing component 所以添加路由的机制类似于此。

Here 您将找到Cortex的完整文档。

使用Cortex只需一个简单的方法:

add_action( \'brain_loaded\', function() {

  Brain\\Routes::add( \'/ads/{cat}/{area}\', \'cat_area_ad\' )
  ->requirements( [ \'cat\' => \'[a-z]+\', \'area\' => \'area-[0-9]+\' ] )
  ->query( function( $matches ) {
    return [
       \'post_type\' => \'ad\',
       \'tax_query\' => [
          \'relation\' => \'AND\',
          [
            \'taxonomy\' => \'category\',
            \'terms\'    => [ $matches[\'cat\'] ],
            \'field\'    => \'slug\'
          ],
          [
            \'taxonomy\' => \'area\',
            \'terms\'    => [ $matches[\'area\'] ],
            \'field\'    => \'slug\'
          ]
       ]
    ];
  } );

} );
"cat_area_ad" 是我分配给路由的ID,它允许轻松构建路由的url(请参阅Cortex docs):

function get_cat_area_url( $cat = \'\', $area = \'\' ) {
  if ( did_action( \'parse_request\' ) && ! empty( $cat ) && ! empty( $area ) ) {
    if ( strpos( $area, \'area-\' ) !== 0 ) {
      $area = \'area-\' . $area;
    }
    return Brain\\Routes::url( \'cat_area_ad\',  [ \'cat\' => $cat, \'area\' => $area ] );
  } else {
    return home_url();
  }
}
前一个函数允许获取路由的url,但必须将area和category作为函数参数传递。

一旦阅读OP,似乎“区域”术语在表格中被命名"area-XX" (其中“XX”是一个数字)我让路线要求该格式,并且我还get_cat_area_url 函数会自动在作为参数传递的区域字符串(如果尚未存在)前加上“area-”,因此您可以这样使用它:

$url = get_cat_area_url( \'bikes\', \'5\' );
echo $url; // will be: example.com/ads/bikes/area-5
get_cat_area_url 只有在以下情况下,功能才能正常工作\'parse_request\' 挂钩已触发(由于限制Cortex url() API method), 但在任何模板文件中,都可以毫无问题地使用它,因为当显示模板时,钩子总是被触发的。

结束

相关推荐

Custom permalinks structure

我希望有这样的结构:www.mysite.com/2013 (必须显示2013年的所有职位)www.mysite.com/my-category/2013 (必须显示2013年和“我的类别”类别的所有帖子)www.mysite.com/my-category/my-tag/ (必须显示所有类别为“我的类别”和标记为“我的标记”的帖子)www.mysite.com/my-category/ (必须显示“我的类别”类别的所有帖子)www.mysite.com/my-