0

I'm setting up "special" url structure for posts etc

Result i want to get is: sitename.com/club/justcavali club is term from taxonomy (club_type) and justcavali is post type (booking_type)

after i setup rewrite for cpt to go for %club_type%, all of my posts/pages go to 404 and im getting some nonsense query on those pages post_type = "attachment" for example,

i've tried every single way to fix this, but someone either taxonomy/cpt breaks or post/page breaks

It breaks when i insert "%club_type%" to rewrite for cpt, and yes i've disabled "with front", also i am deleting taxonomy base from terms

club_type/club - > /club

function cptui_register_my_cpts_listing() {

/**
 * Post Type: Listing.
 */

$labels = array(
    "name" => __( "Listing", "sage" ),
);

$args = array(
    "label" => __( "Listing", "sage" ),
    "labels" => $labels,
    "description" => "New Listinga",
    "public" => true,
    "publicly_queryable" => true,
    "show_ui" => true,
    "delete_with_user" => false,
    "show_in_rest" => true,
    "rest_base" => "",
    "rest_controller_class" => "WP_REST_Posts_Controller",
    "has_archive" => true,
    "show_in_menu" => true,
    "show_in_nav_menus" => true,
    "exclude_from_search" => false,
    "capability_type" => "post",
    "map_meta_cap" => true,
    "hierarchical" => true,
    "rewrite" => array( "slug" => "/%club_type%/", "with_front" => false ),
    "query_var" => true,
    "supports" => array( "title", "editor" ),
    "taxonomies" => array( "club_type", "city_part" ),
);

register_post_type( "listing", $args );
    }

    add_action( 'init', 'cptui_register_my_cpts_listing' );

function cptui_register_my_taxes_club_type() {

/**
 * Taxonomy: Club Type
 */

$labels = array(
    "name" => __( "club_type", "sage" ),
    "singular_name" => __( "club_type", "sage" ),
);

$args = array(
    "label" => __( "club_type", "bgn" ),
    "labels" => $labels,
    "public" => true,
    "publicly_queryable" => true,
    "hierarchical" => true,
    "show_ui" => true,
    "show_in_menu" => true,
    "show_in_nav_menus" => true,
    "query_var" => true,
    "rewrite" => array( 'slug' => 'club_type', 'with_front' => false, ),
    "show_admin_column" => true,
    "show_in_rest" => true,
    "rest_base" => "club_type",
    "rest_controller_class" => "WP_REST_Terms_Controller",
    "show_in_quick_edit" => true,
    );
register_taxonomy( "club_type", array( "listing" ), $args );
}
add_action( 'init', 'cptui_register_my_taxes_club_type' );
1

1 Answer 1

0

First, you don't need to have two actions called during init, they can both be done under the same action function -- so move the register CPT and taxonomy to a single function (or call separate functions from the main one) -- no need to have two init actions.

You should also be registering the taxonomy before the CPT (if you don't want to change your code just call taxonomy action at lower priority than CPT register), otherwise put your taxonomy registration code above the CPT registration code.

"rewrite" => array( "slug" => "/%club_type%/", "with_front" => false )

Can also just be this without the slashes:

"rewrite" => array( "slug" => "%club_type%", "with_front" => false ),

Although I recommend that you add some kind of identifier in your slug, like listing/%club_type% otherwise WordPress will try to use that as a query for specific page.

Check these as well:

Permalinks: custom post type -> custom taxonomy -> post

Mixing custom post type and taxonomy rewrite structures?

You could also look at different plugins available that could do this: https://wordpress.org/plugins/custom-post-type-permalinks/

I suspect your issue is probably because you're not using any kind of identifier before your taxonomy, and as such it's attempting to find it as a post name -- not as a taxonomy slug

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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