Skip to main content
3 of 4
rmv salutation and signature
Mayeenul Islam
  • 12.9k
  • 21
  • 85
  • 169

Custom Taxonomy breaking pages permalinks

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?