Permalink rewrite with custom post type and custom taxonomy

I think thats a quick one:

I’ve got:

Read More
  1. Custom post type: Food
  2. Custom taxonomy (Registered to Food): Fruits
  3. Terms in Fruits: Apple, Orange, Cherry

If I type in example.com/food?fruits=Apple,Cherry, I get all posts in Fruits with the terms Apple and Cherry, thats great!

But I would like to type in example.com/food/fruits/Apple,Cherry or example.com/food/Apple,Cherry to get the same result.

I´ve tried different permalink and rewrite plugins related to custom posts but nothing helped.

Thank you,

David

Related posts

Leave a Reply

1 comment

  1. You have to build up the link structure by using filters post_link and post_type_link:

    add_filter('post_link', 'territorio_permalink', 10, 3);
    add_filter('post_type_link', 'territorio_permalink', 10, 3);
    
    function territorio_permalink($permalink, $post_id, $leavename) {
    if (strpos($permalink, '%territorio%') === FALSE) return $permalink;
    
    // Get post
    $post = get_post($post_id);
    if (!$post) return $permalink;
    
    // Get taxonomy terms
    $terms = wp_get_object_terms($post->ID, 'territorio','orderby=term_order');
    if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
    $taxonomy_slug = $terms[0]->slug.'/'.$terms[1]->slug; //build here
    else $taxonomy_slug = 'not-yet';
    
    return str_replace('%territorio%', $taxonomy_slug, $permalink);
    }
    

    Where hotel is the post type and territorio is a hierarchical taxonomy.

    In post type creation use:

    'rewrite' => array( 'slug' => 'anything-you-want/%territorio%','with_front' => false),
    

    Note: if you want deeper links, your build should go deeper:

    $taxonomy_slug = $terms[0]->slug.'/'.$terms[1]->slug.'/'.$terms[2]->slug;