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' );