Replizierung der Kategorie / Standorthierarchie

Auf der Suche nach Ratschlägen, Empfehlungen oder Vorschlägen für die am besten geeignete Seitenstruktur für eine Website.

Ich migriere eine Website, die etwa 1000 Seiten in der Struktur / service / location / hat – Es gibt 4 Dienste und etwa 250 Standorte

Ich lehne mich davon ab, sie als Seiten zu erstellen, da dies den Seitenabschnitt der Website nur verstopfen wird, was es schwer macht, coreseiten zu finden und zu bearbeiten.

Ich dachte daran, Kategorien und Beiträge zu verwenden, aber dieser Kunde möchte etwas bloggen, also lehne ich mich auch davon ab, die Beiträge zu verstopfen.

Ich dachte an einen benutzerdefinierten Post-Typ, aber der benutzerdefinierte Post-Typ wird einen Slug am Anfang hinzufügen (zB / custom-slug / service / location /), was bedeutet, dass ich 301 die 1000 URLs auf der neuen Site redirect muss / service / location / zu / custom-slug / service / location /).

Ich lehne es an, 4 benutzerdefinierte Post-Typen (die 4 Dienste) zu erstellen und dann die 250 benutzerdefinierten Posts pro Kunden-Post-Typ zu erstellen – aber ich mag den Gedanken nicht, 4 zusätzliche Menüs / Sektionen in admin zu haben (ich könnte darüber hinwegkommen – aber ich denke, dass es einen saubereren Weg geben muss) ODER Nur mit Kategorien und Posts umgehen und ignorieren über das “Verstopfen” Problem …

Hat jemand irgendwelche Empfehlungen oder Vorschläge? Gibt es einen geeigneteren Weg, dies zu tun?

Solutions Collecting From Web of "Replizierung der Kategorie / Standorthierarchie"

Sie können CPTs “slugless” Permalinks ziemlich leicht haben:

register_post_type( 'service', [ 'hierarchical' => true, 'public' => true, // Other args, no need for "rewrite" ]); // Change service to top-level permalink. add_permastruct( 'service', '%service%', [ 'with_front' => false, 'paged' => false, 'feed' => false, ]); // Remove all default service rewrite rules. add_filter( 'service_rewrite_rules', '__return_empty_array' ); 

… die in eine function eingepackt und an init . pre_get_posts diese Post-Typen zu “fangen”, brauchen wir ein wenig pre_get_posts magic:

 add_action( 'pre_get_posts', function ( $wp_query ) { if ( $wp_query->is_main_query() && $wp_query->is_singular() && $wp_query->get( 'pagename' ) ) { if ( ! $post_type = $wp_query->get( 'post_type' ) ) $post_type = []; elseif ( ! is_array( $post_type ) ) $post_type = [ $post_type ]; $wp_query->set( 'post_type', array_merge( $post_type, [ 'page', 'service', ])); } }); 

Stellen Sie sicher, dass Sie Ihre Rewrite-Regeln leeren (laden Sie einfach Einstellungen> Permalinks im Admin).