web-dev-qa-db-fra.com

Pages enfant sur les types de publication personnalisés hiérarchiques 404

Je travaille avec des types de publication personnalisés récemment et je n’ai rencontré aucun problème majeur. Cette fois, j'essaie quelque chose de nouveau. Je veux créer un CPT qui fonctionne fondamentalement comme des pages, avec une hiérarchie des pages.

La vraie chose est en suédois, je vais donc utiliser "Livres" comme exemple de la façon dont je voudrais que cela fonctionne.

Donc, je crée d'abord mon nouveau type de message:

define('BOOKS_HTTP_PATH', WP_PLUGIN_URL . '/' . str_replace(basename(__FILE__), "", plugin_basename(__FILE__)));
function add_custom_post_type_books() {
    register_post_type( 'lpm-books', array( 
        'labels' => array( 
            'name' => 'Books',
            'singular_name' => 'Book',
            'add_new' => 'New book',
            'add_new_item' => 'Add new book',
            'not_found' => 'No books found' ),
        'public' => true, 
        'show_ui' => true,
        'show_in_nav_menus' => true,
        'menu_icon' => BOOKS_HTTP_PATH . 'images/books-icon.png',
        'menu_position' => 20,
        'hierarchical' => true,
        'rewrite' => array( 'slug' => 'books'),
        'capability_type' => 'page',
        'supports' => array('title','editor','page-attributes'),
        'query_var' => '',
        '_builtin' => false,
        ) 
    );
}
add_action( 'init', 'add_custom_post_type_books' );

Dans mon cas, j'ai un nom spécifique pour le CPT, lpm-books (cela peut paraître étrange dans cet exemple, mais comme je l'ai dit plus tôt, je le fais en suédois mais j'aimerais que le nom du type de message soit en anglais si possible). Je règle le slug de réécriture sur books pour mes permaliens et j'ajoute 'hierarchical' => true et 'supports' => 'page-attributes' pour rendre la méta-boîte Attribute disponible.

Dans Admin-> Livres, la vue ressemblerait à ceci:

  • Livre 1
    • Chapitre 1
    • Chapitre 2
  • Livre 2
    • Chapitre 1
    • Chapitre 2
    • ...

J'ajoute donc une page régulière appelée Mes livres (slug: my-books) pour avoir une "page de démarrage" décrivant ma collection de livres. L'URL est http://www.example.com/my-books/. Sur cette page, je liste tous mes livres ajoutés et leurs chapitres.

Fonctionne parfaitement si je clique sur le livre 1 (ou le livre 2). L'URL est http://www.example.com/books/book-1/. Mais si je veux voir un chapitre (url: http://www.example.com/books/book-1/chapter-1), je reçois 404.

Ma structure de lien permanent est la suivante: /%category%/%postname%/

Je n'arrive vraiment pas à comprendre pourquoi les pages enfant personnalisées (posts) 404. Depuis que ma page de démarrage habituelle "Mes livres" ne se heurte ni au nom du CPT ni à la lettre de réécriture, je suppose que je suis tout à fait à l’aise.

Remarque: j'ai également essayé de supprimer 'rewrite' => array( 'slug' => 'books') mais je reçois toujours le code 404 dans les "messages enfants".

Comment faites-vous lors de la création de CPT hiérarchiques? Puis-je faire ce travail ou dois-je repenser la structure?

Je vous remercie!

3
lepardman

Très bien, après quelques heures de plus, j'ai retiré le 'query_var' => '', et ré-enregistré/vidé mes paramètres de permalien. La valeur par défaut de Query_var est true et cela fonctionne. Codage de la cécité ou de quelque chose lol. J'espère que cela peut aider quelqu'un d'autre.

2
lepardman