Entfernen Taxonomie Slug, wenn keine Taxonomie zu benutzerdefinierten Beitragstyp zugeordnet ist?

Ich habe einen benutzerdefinierten Post-Typ namens ‘sets’ und eine Taxonomie namens ‘project’. Die meisten Posts unter diesem benutzerdefinierten Beitragstyp erhalten einen Projektbegriff, aber nicht unbedingt. Wenn ein Projektbegriff nicht zugewiesen wurde, erhalte ich eine URL wie:

example.com/sets/no-project/the-post-name 

In diesem Fall möchte ich Folgendes anzeigen, wenn keine Taxonomie zugewiesen ist :

 example.com/sets/the-post-name 

Hier ist mein Originalcode:

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

Während ich den statementen aus diesem Beitrag folgte , konnte ich folgendes daraus machen:

Aktualisierter Code mit registrierter CPT & Taxonomie (nicht voll funktionsfähig!)

 // Register Taxonomy add_action( 'init', 'create_project_taxonomies', 0 ); function create_project_taxonomies() { $labels = array( 'name' => _x( 'Project', 'taxonomy general name' ), 'singular_name' => _x( 'Project', 'taxonomy singular name' ), 'search_items' => __( 'Search Projects' ), 'all_items' => __( 'All Projects' ), 'parent_item' => __( 'Parent Project' ), 'parent_item_colon' => __( 'Parent Project:' ), 'edit_item' => __( 'Edit Project' ), 'update_item' => __( 'Update Project' ), 'add_new_item' => __( 'Add New Project' ), 'new_item_name' => __( 'New Project Name' ), 'menu_name' => __( 'Projects' ), ); $args = array( 'hierarchical' => true, 'labels' => $labels, '_builtin' => false, 'public' => true, 'show_ui' => true, 'with_front' => false, 'show_admin_column' => true, 'query_var' => true, 'rewrite' => array( 'slug' => 'sets' ), ); register_taxonomy( 'project', array('set'), $args ); } // Project Permalink add_filter('post_type_link', 'sets_permalink', 10, 3); function sets_permalink($permalink, $post_id, $leavename) { if (strpos($permalink, '%project%') === FALSE) return $permalink; // Get post $post = get_post($post_id); if (!$post) return $permalink; // Get taxonomy terms $terms = wp_get_object_terms($post->ID, 'project'); if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0])) $taxonomy_slug = $terms[0]->slug . '/'; else $taxonomy_slug = ''; return str_replace('%project%/', $taxonomy_slug, $permalink); } add_action ('init', 'custom_rewrite', 10, 0); function custom_rewrite () { add_rewrite_rule( 'sets/([^/]+)/?$', 'index.php?set=$matches[1]', 'top'); flush_rewrite_rules(); } // Custom Post Type add_action( 'init', 'create_post_type' ); function create_post_type() { register_post_type( 'set', array( 'labels' => array( 'name' => __( 'Sets' ), 'all_items' => __( 'All Sets'.$plural), 'singular_name' => __( 'Set' ), 'edit_item' => __( 'Edit Set' ), ), 'public' => true, 'has_archive' => 'sets', 'can_export' => true, 'publicly_queryable' => true, 'exclude_from_search' => false, 'query_var' => true, 'show_in_nav_menus' => true, 'show_ui' => true, 'menu_position' => 8, 'capability_type' => 'post', 'heirarchical' => true, 'menu_icon' => 'dashicons-playlist-audio', 'rewrite' => array('slug' => 'sets/%project%', 'with_front' => false ), 'supports' => array( 'title', 'thumbnail', 'editor'), 'register_meta_box_cb' => 'set_meta_boxes', ) ); flush_rewrite_rules(); } 

Das Problem

Der aktualisierte Code scheint ordnungsgemäß zu funktionieren. Wenn ich jedoch versuche, einen Beitrag anzuzeigen, dem keine Taxonomie zugewiesen ist, stoße ich auf ein seltsames Problem. Zum Beispiel funktioniert diese URL, aber sie gibt eine 404-Seite zurück :

 example.com/sets/the-post-name 

Es scheint, als ob der eigentliche Post für die vorherige URL angezeigt wird bei:

 example.com/sets/project/the-post-name 

Aber wie oben erwähnt, muss ich es so anzeigen, wenn keine Taxonomie zugewiesen ist :

 example.com/sets/the-post-name 

Jetzt, wenn ich eine Taxonomie mit dem Slug namens ” groove-sessions ” dem Post zuweisen, wird alles perfekt angezeigt und der Link zeigt keine 404-Seite. Zum Beispiel funktioniert diese URL :

 example.com/sets/groove-sessions/the-post-name 

Irgendwelche Ideen, wie ich dieses Problem beheben kann? Wie, gibt es eine Möglichkeit, das ganze% -Projekt% zu ignorieren, wenn kein Taxonomiebegriff zugewiesen ist? Vielen Dank.

Vielen Dank!

Solutions Collecting From Web of "Entfernen Taxonomie Slug, wenn keine Taxonomie zu benutzerdefinierten Beitragstyp zugeordnet ist?"

Mit hilfreichen Tipps von Milo war ich in der Lage, den Taxonomie-Slug zu entfernen, wenn dem benutzerdefinierten Beitragstyp keine Taxonomie zugewiesen ist, indem Sie den oben genannten aktualisierten functionen den folgenden Code hinzufügen:

 add_filter( 'request', 'project_request_filter' ); function project_request_filter( $request ){ if( array_key_exists( 'project' , $request ) && ! get_term_by( 'slug', $request['project'], 'project' ) ){ $request['set'] = $request['project']; $request['name'] = $request['project']; $request['post_type'] = 'set'; unset( $request['project'] ); } return $request; }