Mehrere Beitragstypen – teilen sich den gleichen ReWrite Slug?

Ich bin auf eine andere wundervolle 404 Ausgabe gestoßen. Ich versuche, 2 verschiedene Post-Typen zu haben, die den gleichen Neuschreibblock teilen. Ich habe meine Rewrite-Regeln geleert, und wenn ich nur einen CPT-Test durchführe, bekommt der andere einen 404. Mein Neuschreiben, das ich für beide verwenden möchte, ist:

'rewrite' => array('slug' => 'team/%teamtype%'), 

Wer weiß, wie man damit umgeht?

 add_action( 'init', 'create_rider_type' ); function create_rider_type() { register_post_type('riders', array( 'description' => 'rider custom post type', 'show_ui' => true, 'menu_position' => 5, 'menu_icon' => get_stylesheet_directory_uri() . '/images/riders.png', 'exclude_from_search' => false, 'labels' => array( 'name' => 'Team Riders', 'singular_name' => 'Rider', 'add_new' => 'Add New rider', 'add_new_item' => 'Add New rider', 'edit' => 'Edit riders', 'edit_item' => 'Edit rider', 'new_item' => 'New rider', 'view' => 'View rider', 'view_item' => 'View rider', 'search_items' => 'Search riders', 'not_found' => 'No riders found', 'not_found_in_trash' => 'No riders found in Trash', 'parent' => 'Parent rider', ), 'hierarchical' => false, 'supports' => array('title','editor','excerpt', 'trackbacks','custom-fields', 'comments','revisions','thumbnail','author','page-attributes'), 'public' => true, 'rewrite' => array('slug' => 'team/%teamtype%'), 'taxonomies' => array('teamtype') ) ); } add_action( 'init', 'create_sponsor_type' ); function create_sponsor_type() { register_post_type('sponsors', array( 'description' => 'sponsor custom post type', 'show_ui' => true, 'menu_position' => 5, 'menu_icon' => get_stylesheet_directory_uri() . '/images/sponsors.png', 'exclude_from_search' => false, 'labels' => array( 'name' => 'Team sponsors', 'singular_name' => 'sponsor', 'add_new' => 'Add New sponsor', 'add_new_item' => 'Add New sponsor', 'edit' => 'Edit sponsors', 'edit_item' => 'Edit sponsor', 'new_item' => 'New sponsor', 'view' => 'View sponsor', 'view_item' => 'View sponsor', 'search_items' => 'Search sponsors', 'not_found' => 'No sponsors found', 'not_found_in_trash' => 'No sponsors found in Trash', 'parent' => 'Parent sponsor', ), 'hierarchical' => false, 'supports' => array('title','editor','excerpt', 'trackbacks','custom-fields', 'comments','revisions','thumbnail','author','page-attributes'), 'public' => true, 'rewrite' => array('slug' => 'team/%teamtype%'), 'taxonomies' => array('teamtype') ) ); } 

** * ** * ** * **** Aktualisierung * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * *

Der ursprüngliche CPT-Neuschreibcode, den ich gepostet habe, wurde vereinfacht, so dass ich mehr auf den Punkt bringen konnte – aber vielleicht macht es mehr Sinn, wenn Sie sehen können, wie ich diese Permalinks mit meiner benutzerdefinierten Taxonomie handhabe. Ich habe den angezeigten Code aktualisiert.

Ich möchte wirklich, dass sie als separate Post-Arten für die Organisation sowie separate Metaboxen für jeden behalten. Bitte überprüfen Sie die aktualisierten Umschreibungen für die CPTs, sowie meine Taxonomieeinstellungen unten:

 add_action( 'init', 'create_team_taxonomies' ); function create_team_taxonomies() { register_taxonomy( 'teamtype', array('riders','sponsors'), array( 'labels' => array( 'name' => 'Team Types', 'singular_name' => 'Team Type', 'search_items' => 'Search Team Types', 'popular_items' => 'Popular Team Types', 'all_items' => 'All Team Types', 'parent_item' => 'Parent Team Type', 'parent_item_colon' => 'Parent Team Type:', 'edit_item' => 'Edit Team Type', 'update_item' => 'Update Team Type', 'add_new_item' => 'Add New Team Type', 'new_item_name' => 'New Team Type Name' ), 'hierarchical' => true, 'public' => true, 'show_ui' => true, 'query_var' => 'teamtype', 'show_tagcloud' => true, 'rewrite' => array( 'slug' => 'team', 'with_front' => false) ) ); } 

Und so stelle ich das Neuschreiben ein, wenn ich die Taxonomie auswähle und den Post veröffentliche:

 add_filter('post_link', 'teamtypepermalink', 10, 3); add_filter('post_type_link', 'teamtypepermalink', 10, 3); function teamtypepermalink($permalink, $post_id, $leavename) { if (strpos($permalink, '%teamtype%') === FALSE) return $permalink; // Get post $post = get_post($post_id); if (!$post) return $permalink; // Get taxonomy terms $terms = wp_get_object_terms($post->ID, 'teamtype'); if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug; else $taxonomy_slug = 'not-specified'; return str_replace('%teamtype%', $taxonomy_slug, $permalink); } 

Solutions Collecting From Web of "Mehrere Beitragstypen – teilen sich den gleichen ReWrite Slug?"

Soweit ich weiß, können Sie das nicht tun. Jeder Slug wird in ein query_vars-Element konvertiert, das einen bestimmten Objekttyp abfragt (Taxonomie oder Post-Typ). Wenn Sie Ihre WP_Query analysieren, sehen Sie, dass der erste Posttyp abgefragt wird.

Vielleicht kann uns hier ein WP-Ninja aufklären, aber ich bin mir fast sicher, dass du es nicht schaffen kannst. Oder zumindest solltest du nicht.

Da CPTs (und auch Posts / Seiten) konstruiert werden, ist das nicht möglich. Der Slug ist für den spezifischen Typ reserviert, mit dem Verständnis / der Annahme, dass 2 CPTs = 2 verschiedene Arten von Inhalt sind.

basierend auf Ihrem Code scheint es fast so, als ob jedes der Elemente, die Sie in der CPT haben, besser als benutzerdefinierte Taxonomie gedient wäre, wobei beide an einen einzelnen CPT angeschlossen sind (ich vermute eine Art von Event?)

Ihre Rewrite-Regeln überschreiben sich gegenseitig und WordPress fragt nur nach einem der Post-Typen. Ich denke, es ist die neueste, die registriert wird, dass “gewinnt”, also /testslug/bmw/ wird immer nach einem Beitrag mit Slug bmw und Post-Typ- sponsors abfragen. Wenn Sie zu /testslug/some-name/ und some-name ein Fahrer ist, wird er immer noch nach Post-Typ- sponsors und Post-Slug- some-name /testslug/some-name/ . Es wird keinen Beitrag finden und Ihnen somit einen 404 geben. Das passiert in der “Standard” -Abfrage, die WordPress für Sie erledigt, bevor es die Vorlagenseite lädt, also können Sie das nicht in Ihrer single-sponsors.php Vorlage lösen Datei zum Beispiel (Sie könnten in 404.php , aber dann wird es hässlich).

Die sauberste Lösung besteht darin, einen Teil der Logik, die diese URL-Analyse durchführt, zu ersetzen und sie dazu zu bringen, eine “mehrdeutige” URL zu akzeptieren. Testen Sie, ob es sich um einen Fahrer oder einen Sponsor handelt und ändern Sie die Parameter so, dass WordPress entweder mit einem Fahrer oder einem Sponsor fortfährt. Mike bot einmal eine Möglichkeit, dies mit Seiten und Taxonomien zu tun , es sollte möglich sein, dies auf Posts nur zu erweitern.