在Wordpress中设置类似于商店的网址结构,其中包含自定义帖子类型的自定义分类和术语

时间:2017-08-22 17:29:48

标签: php regex wordpress

抽象

我的任务是弄清楚如何使用Wordpress Rewrite API创建一个可以过滤products自定义帖子类型帖子的网址结构。当通过URL结构传递分类法条款时,Wordpress会原生过滤products个帖子并将结果返回到archive-products.php模板。

taxonomies及其terms products

的示例数据集
  • 解决方案

    • 宽带
    • 企业
  • 系列

    • 快速
    • Optical Lan
  • 行业

    • 商业
    • 教育
    • 高等教育
    • 医疗保健
  • 技术

    • 高级操作
    • 因特网
    • 传统服务

所需网址的示例

  1. products/solutions/broadband,enterprise/series/express/industries/business,education
  2. products/industries/tech/internet/solutions/broadband,express
  3. products/solutions/broadband
  4. 以上只是一个结构的想法,其他任何人都非常欢迎。

    问题

    由于我缺乏正则表达式技能,我不确定什么是可能的。任何正确方向的点都将非常感激。

1 个答案:

答案 0 :(得分:0)

浏览以下代码。它可以帮到你。

function generate_taxonomy_rewrite_rules( $wp_rewrite ) {
  $rules = array();
  $post_types = get_post_types( array( 'name' => 'products', 'public' => true, '_builtin' => false ), 'objects' );
  $taxonomies = get_taxonomies( array( 'name' => 'Solutions', 'public' => true, '_builtin' => false ), 'objects' );

  foreach ( $post_types as $post_type ) {
    $post_type_name = $post_type->name; // 'product'
    $post_type_slug = $post_type->rewrite['slug']; // 'products'

    foreach ( $taxonomies as $taxonomy ) {
      if ( $taxonomy->object_type[0] == $post_type_name ) {
        $terms = get_categories( array( 'type' => $post_type_name, 'taxonomy' => $taxonomy->name, 'hide_empty' => 0 ) );
        foreach ( $terms as $term ) {
          $rules[$post_type_slug . '/' . $term->slug . '/?$'] = 'index.php?' . $term->taxonomy . '=' . $term->slug;
        }
      }
    }
  }
  $wp_rewrite->rules = $rules + $wp_rewrite->rules;
}
add_action('generate_rewrite_rules', 'generate_taxonomy_rewrite_rules');