web-dev-qa-db-fra.com

Combien de contrôle avez-nous sur les limaces de réécriture CPT? Puis-je créer une page "racine" pour mon CPT avec le chemin de page, puis avoir des chemins pour d'autres pages?

Dis que j'ai un CPT appelé i Dunno, "Library" qui est juste un ensemble de "pages" ("has_archive" => false) et la limite de réécriture est "bibliothèque". J'ai également l'intention d'avoir un ensemble de pages comme "À propos de", "Archives" et "nouveaux livres".

Puis-je faire quelque chose afin que je fasse une page appelée "home" et au lieu de son URL étant https://example.org/library/home est-ce que ça pourrait être https://example.org/library? Et puis la page à propos de l'URL de https://example.com/library/about

NOTE - Je sais que je pourrait Définir la limace de réécriture sur "/" puis créer une nouvelle page nommée "Bibliothèque", puis faire des choses comme la bibliothèque "À propos de" ou "Archives" Children of "Bibliothèque "Mais je me sens comme une étape supplémentaire que mes utilisateurs vont être mécontents de devoir faire.

Et si j'ai fait un deuxième CPT, "Bibliothèques-livres" y aurait-il de la sorte pour définir sa goutte de réécriture à "library/books" ou aurais-je besoin d'un chemin totalement différent? Donc je voudrais https://example.org/library/books Pour être l'archive du CPT "Library-Books", puis https://example.org/library/books/book-title Pour les poteaux de livres individuels.

1
rugbert

La façon dont je le vois, tu pourrais faire:

// Via the init hook, do all these:

register_post_type( 'library-books', [
    'public'      => true,
    'label'       => 'Library Books',
    'rewrite'     => [ 'with_front' => false, 'slug' => 'library/books' ],
    'has_archive' => 'library/books',
    // other args here
] );

register_post_type( 'library', [
    'public'      => true,
    'label'       => 'Libraries',
    'rewrite'     => [ 'with_front' => false, 'slug' => 'library' ],
    'has_archive' => false,
    // other args here
] );

add_rewrite_rule( '^library/?$', 'index.php?library=home', 'top' );

C'est à dire.

  • Enregistrez le library-books CPT en premier, avec library/books comme la limace de réécriture ainsi que has_archive.

  • Ensuite, enregistrez le CPT library CPT avec library comme limite de réécriture, et has_archive défini sur false.

  • Et enregistrer une règle de réécriture personnalisée pour le example.com/library qui (en interne) charge example.com/library/home (qui est un poste du CPT library CPT, bien que vous puissiez vraiment modifier la requête de la règle de réécriture pour charger un poste d'un autre type de poste tel que page).

Mais bien sûr, dans votre library CPT, vous ne devriez pas avoir de poste avec books comme la limace.

2
Sally CJ