0

I have CPT "Library" with "Library-category" taxonomy.

What I want to achieve is to have:

I've got it mostly to work with:

register_post_type(
    'library',
    array(
        'label'               => __( 'Library', 'my-theme' ),
        'description'         => __( 'Library', 'my-theme' ),
        'labels'              => array(
            'name'           => _x( 'Library', 'Post Type General Name', 'my-theme' ),
            'singular_name'  => _x( 'Library item', 'Post Type Singular Name', 'my-theme' ),
            'menu_name'      => __( 'Library', 'my-theme' ),
            'name_admin_bar' => __( 'Library item', 'my-theme' ),
            'add_new_item'   => __( 'Create New Library item', 'my-theme' ),
            'add_new'        => __( 'Add Library item', 'my-theme' ),
        ),
        'supports'            => array( 'title', 'editor', 'excerpt', 'revisions', 'thumbnail' ),
        'hierarchical'        => true,
        'public'              => true,
        'show_ui'             => true,
        'show_in_menu'        => true,
        'menu_position'       => 11,
        'menu_icon'           => 'dashicons-analytics',
        'show_in_admin_bar'   => true,
        'show_in_nav_menus'   => true,
        'can_export'          => true,
        'has_archive'         => true,
        'rewrite'             => array(
            'slug'       => 'library/%library-category%',
            'with_front' => false,
        ),
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'page',
        'show_in_rest'        => true,
    )
);

register_taxonomy(
    'library-category',
    array( 'library' ),
    array(
        'labels'            => array(
            'name'          => _x( 'Categories', 'Taxonomy General Name', 'my-theme' ),
            'singular_name' => _x( 'Category', 'Taxonomy Singular Name', 'my-theme' ),
        ),
        'hierarchical'      => true,
        'public'            => true,
        'show_ui'           => true,
        'show_admin_column' => true,
        'show_in_nav_menus' => true,
        'show_tagcloud'     => false,
        'show_in_rest'      => true,
        'rewrite'             => array(
            'slug'       => 'library/%library-category%/',
            'with_front' => false,
        ),
    )
);

However, the https://example.com/library doesn't work and returns 404. How can I fix it?

0

Finally, found a solution mix:

The CPT has to have:

 'has_archive'         => 'library', // Fixes the archive URL.
 'rewrite'             => array(
    'slug'       => 'library/%library-category%',
    'with_front' => false,
 )

Taxonomy should be as following:

'rewrite'        => array(
    'slug'       => 'library',
    'with_front' => false,
),

And than you need to rewrite the links:

/**
 * Custom rewrite rules for URL
 *
 * @param string  $post_link Post link url.
 * @param integer $id Post ID.
 * @return string
 */
function getmanta_technologies_post_link( $post_link, $id = 0 ) {
    $post = get_post( $id );
    if ( is_object( $post ) ) {     
        $terms_lc = wp_get_object_terms( $post->ID, 'library-category' );
        if ( $terms_lc ) {
            return str_replace( '%library-category%', $terms_lc[0]->slug, $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'getmanta_technologies_post_link', 1, 3 );
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.