How to add custom taxonomy in custom post type permalink? How to add custom taxonomy in custom post type permalink? wordpress wordpress

How to add custom taxonomy in custom post type permalink?


First, register your taxonomy and set the slug argument of rewrite to shows:

register_taxonomy(    'campaign',    'asset',    array(        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),        // your other args...    ));

Next, register your post type and set the slug to shows/%show_category%, and set has_archive argument to shows:

register_post_type(    'show',    array(        'rewrite' => array( 'slug' => 'campaign/%asset%', 'with_front' => false ),        'has_archive' => 'asset',        // your other args...    ));

Last, add a filter to post_type_link to substitute the show category in individual show permalinks:

function wpa_show_permalinks( $post_link, $post ){    if ( is_object( $post ) && $post->post_type == 'asset' ){        $terms = wp_get_object_terms( $post->ID, 'campaign' );        if( $terms ){            return str_replace( '%campaign%' , $terms[0]->slug , $post_link );        }    }    return $post_link;}add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );


First, register your taxonomy, then register your custom post type. You may also need to save your permalinks. I don't think you want 'with_front' set to true. The rest may be ok, but here's a working example.

/** * Register a 'campaign' taxonomy for post type 'asset'. * * @see register_post_type for registering post types. */function wpdocs_create_campaign_tax_rewrite() {    register_taxonomy( 'campaign', 'asset', array(        'rewrite' => array(            'slug' => '',            'with_front' => false,        ),    ) );}add_action( 'init', 'wpdocs_create_campaign_tax_rewrite', 0 );/** * Implements init_hook to register post type. * https://codex.wordpress.org/Function_Reference/register_post_type */function generic_create_posttype_asset() {    register_post_type(        'asset',        array(            'labels'       => array(                'name'          => __( 'Assets' ),                'singular_name' => __( 'Assets' ),                'add_new'       => __( 'New Asset' ),                'add_new_item'  => __( 'New Asset' ),                'edit_item'     => __( 'Edit Asset' ),            ),            'description'  => 'Campaign ...',            'public'       => true,            'hierarchical' => true,            'has_archive'  => true,            'rewrite' => array(                'slug' => '%campaign%',                'with_front' => false,            ),            'show_in_menu' => true,            'menu_icon'    => 'dashicons-category', // https://developer.wordpress.org/resource/dashicons/ .            'supports'     => array( 'title', 'editor', 'revisions', 'thumbnail' ),        )    );}add_action( 'init', 'generic_create_posttype_asset' );/** * Rewrite '%campaign%' with taxonomy assigned. */function asset_show_permalinks( $post_link, $post ){    if ( is_object( $post ) && $post->post_type == 'asset' ){        $terms = wp_get_object_terms( $post->ID, 'campaign' );        if( $terms ){            return str_replace( '%campaign%' , $terms[0]->slug , $post_link );        }    } else {            return $post_link;    }}add_filter( 'post_type_link', 'asset_show_permalinks', 1, 2 );function generic_cpt_rewrite_flush() {    generic_create_posttype_asset();    flush_rewrite_rules();}register_activation_hook( __FILE__, 'generic_cpt_rewrite_flush' );