I\'m stuck for some days with this problem and I don\'t know what else to do.
With %somethingHere%
on slug rewrite, pages permalinks are broken (CPT AND CT OK).
Without, I don\'t have my desired Post structure but Pages permalinks are OK.
CPT and CT Creation
function custom_post_type() {
register_taxonomy(
\'marca\',
\'\',
array(
\'label\' => \'Marcas\',
\'singular_label\' => \'Marca\',
\'hierarchical\' => true,
\'query_var\' => true
//\'rewrite\' => array(\'slug\' => \'relogios\'),
)
);
$labels = array(
\'name\' => _x( \'Relogios\', \'Post Type General Name\', \'text_domain\' ),
\'singular_name\' => _x( \'Relogio\', \'Post Type Singular Name\', \'text_domain\' ),
\'menu_name\' => __( \'Relogios\', \'text_domain\' ),
\'parent_item_colon\' => __( \'Parent Item:\', \'text_domain\' ),
\'all_items\' => __( \'All Items\', \'text_domain\' ),
\'view_item\' => __( \'View Item\', \'text_domain\' ),
\'add_new_item\' => __( \'Add New Item\', \'text_domain\' ),
\'add_new\' => __( \'Add New\', \'text_domain\' ),
\'edit_item\' => __( \'Edit Item\', \'text_domain\' ),
\'update_item\' => __( \'Update Item\', \'text_domain\' ),
\'search_items\' => __( \'Search Item\', \'text_domain\' ),
\'not_found\' => __( \'Not found\', \'text_domain\' ),
\'not_found_in_trash\' => __( \'Not found in Trash\', \'text_domain\' ),
);
$args = array(
\'label\' => __( \'relogios\', \'text_domain\' ),
\'description\' => __( \'Relogios\', \'text_domain\' ),
\'labels\' => $labels,
\'supports\' => array( \'title\', \'editor\', \'revisions\', \'custom-fields\', \'page-attributes\', ),
\'taxonomies\' => array( \'post_tag\' , \'marca\'),
\'hierarchical\' => false,
\'public\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'show_in_nav_menus\' => true,
\'show_in_admin_bar\' => true,
\'menu_position\' => 5,
\'can_export\' => true,
\'has_archive\' => false,
\'exclude_from_search\' => false,
\'publicly_queryable\' => true,
\'rewrite\' => array(
//\'slug\' => \'event\',
\'slug\' => \'%marca%/relogios\',
\'with_front\' => true
),
\'menu_icon\' => \'dashicons-clock\',
\'capability_type\' => \'post\',
);
register_post_type( \'relogios\', $args );
$labels_joias = array(
\'name\' => _x( \'Joias\', \'Post Type General Name\', \'text_domain\' ),
\'singular_name\' => _x( \'Joia\', \'Post Type Singular Name\', \'text_domain\' ),
\'menu_name\' => __( \'Joias\', \'text_domain\' ),
\'parent_item_colon\' => __( \'Parent Item:\', \'text_domain\' ),
\'all_items\' => __( \'All Items\', \'text_domain\' ),
\'view_item\' => __( \'View Item\', \'text_domain\' ),
\'add_new_item\' => __( \'Add New Item\', \'text_domain\' ),
\'add_new\' => __( \'Add New\', \'text_domain\' ),
\'edit_item\' => __( \'Edit Item\', \'text_domain\' ),
\'update_item\' => __( \'Update Item\', \'text_domain\' ),
\'search_items\' => __( \'Search Item\', \'text_domain\' ),
\'not_found\' => __( \'Not found\', \'text_domain\' ),
\'not_found_in_trash\' => __( \'Not found in Trash\', \'text_domain\' ),
);
$args_joias = array(
\'label\' => __( \'joias\', \'text_domain\' ),
\'description\' => __( \'Joias\', \'text_domain\' ),
\'labels\' => $labels_joias,
\'supports\' => array( \'title\', \'editor\', \'revisions\', \'custom-fields\', \'page-attributes\', ),
\'taxonomies\' => array(\'post_tag\', \'marca\' ),
\'hierarchical\' => false,
\'public\' => true,
\'show_ui\' => true,
\'show_in_menu\' => true,
\'show_in_nav_menus\' => true,
\'show_in_admin_bar\' => true,
\'menu_position\' => 5,
\'can_export\' => true,
\'has_archive\' => false,
\'exclude_from_search\' => false,
\'publicly_queryable\' => true,
\'rewrite\' => array(
\'slug\' => \'%marca%/joias\',
\'with_front\' => true
),
\'menu_icon\' => \'dashicons-clock\',
\'capability_type\' => \'post\',
);
register_post_type( \'joias\', $args_joias );
}
add_action( \'init\', \'custom_post_type\');
Post Link Filter
This is the function where I replace the general taxonomy name for the current taxonomy term.
add_filter(\'post_type_link\', \'marca_permalink_structure\');
function marca_permalink_structure($post_link, $post, $leavename, $sample)
{
//if (is_page()) { return $post_link;}
if ( false !== strpos( $post_link, \'%marca%\' ) ) {
$event_type_term = get_the_terms( $post->ID, \'marca\' );
$post_link = str_replace( \'%marca%\', array_pop( $event_type_term )->slug, $post_link );
}
return $post_link;
}
Any ideas?