Entfernen Sie Slug aus benutzerdefinierten Beitragstyp Ergebnisse in 404

Ich arbeite an einem Plugin, das Listen erstellt. Nachdem ich eine Liste erstellt hatte, wollte ich den Slug aus der URL entfernen

Post-Typ:

$rewrite = [ 'slug' => 'single-link', 'with_front' => false, 'pages' => false, 'feeds' => false, ]; $args = [ 'label' => esc_html__( 'Single Link', 'single-link' ), 'labels' => $labels, 'supports' => [ 'title' ], 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 15, 'menu_icon' => 'dashicons-admin-links', 'show_in_admin_bar' => false, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => false, 'exclude_from_search' => true, 'publicly_queryable' => true, 'rewrite' => $rewrite, 'capability_type' => 'page', 'show_in_rest' => true, ]; $args = apply_filters( 'single-link/post_type/args', $args ); register_post_type( 'single-link', $args ); 

Entferne den Slug von der URL:

 function remove_cpt_slug( $post_link, $post, $leavename ) { if ( 'single-link' != $post->post_type || 'publish' != $post->post_status ) { return $post_link; } $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link ); return $post_link; } add_filter( 'post_type_link', 'remove_cpt_slug', 10, 3 ); function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } } add_action( 'pre_get_posts', 'change_slug_struct' ); 

(Dieser Code ist von hier )

Jetzt, nachdem die Veröffentlichung abgeschlossen wurde, wird der Slug / Single-Link / gelöscht, aber beim Besuch der Seite erhalten wir immer einen 404. Ändern / erneutes Speichern der Permalinks hat nicht geholfen. Was mache ich falsch?

Solutions Collecting From Web of "Entfernen Sie Slug aus benutzerdefinierten Beitragstyp Ergebnisse in 404"

Die Registrierung des benutzerdefinierten Post-Typs und der Permalink-Änderung ist OK. Das Problem ist mit den WordPress Rewrite-Regeln, die mehr als wahrscheinlich die “aufgeräumt” URL Ihrer einfachen Links zu Seiten pagename und es wird die pagename Query Var nicht name wie Ihre change_slug_struct() -function angenommen.

Ändern Sie die function so, dass alle Fälle berücksichtigt werden:

 function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' ); 

Sie müssen die Permastruktur ändern. Standardmäßig wird der Beitrag Ihres benutzerdefinierten Beitragstyps nur gefunden, wenn die URL mit dem Slug-Präfix beginnt. Wenn Sie das Präfix ändern, haben Sie ähnliche Probleme wie beim Löschen. Sehen Sie sich diesen Beitrag an .

Um das Entfernen des post-type slug prefix zu erreichen, sollten Sie sich in single-link_rewrite_rules und diese Regeln durchlaufen und auch dort das Präfix entfernen.

Hinweis: Änderungen in der Perma-Struktur können URL-Konflikte verursachen.