J'ai creusé toutes les questions ici sur les permaliens de type de message personnalisé, mais la plupart semblent être soit des problèmes avec les réécritures de taxonomie personnalisées, soit le manque évident de flush_rewrite_rules (). Mais dans mon cas, j'utilise uniquement un type de publication personnalisé (pas de taxonomie), défini pour être hiérarchique (afin que je puisse attribuer des relations parent-enfant), avec le "support" approprié pour les attributs metabox, etc., etc. I 'ai vidé les règles de réécriture de mille façons différentes. J'ai essayé différentes structures de permaliens. Mais les URL enfants aboutissent toujours à 404!
J'avais à l'origine des types de publication personnalisés indépendants pour les éléments "parent" et "enfant" (en utilisant p2p), et je n'aurais probablement eu aucun problème à utiliser une taxonomie pour le groupe "parental" - je sais que ceux-ci seraient sémantiquement plus précis. Mais pour le client, il est plus facile pour lui de visualiser la hiérarchie lorsque les "publications" sont affichées dans l'administrateur, tout comme les pages: un simple arbre où les enfants apparaissent sous le parent, préfixé d'un "-", et dans le bon ordre. En outre, diverses méthodes d'attribution de l'ordre par glisser-déposer peuvent être utilisées. Le regroupement via la taxonomie (ou p2p) se traduit par une liste plate de "publications" dans les listes d'administration, ce qui n'est tout simplement pas aussi évident visuellement.
Donc ce que je recherche, c'est littéralement exactement le même comportement que les "pages" principales, mais avec mon type de publication personnalisé. J'ai enregistré le type de publication comme prévu, et dans l'administrateur, cela fonctionne parfaitement - je peux attribuer un parent et un menu_order pour chaque newsletter "publication", ils apparaissent correctement dans les listes de modification:
Spring 2012
— First Article
— Second Article
Et leurs permaliens semblent être construits correctement. En fait, si je change quoi que ce soit sur la structure, ou même modifie le slug de réécriture lors de l'enregistrement du type de message, ils se mettent automatiquement à jour correctement, donc je sais que quelque chose fonctionne:
http://mysite.com/parent-page/child-page/ /* works for pages! */
http://mysite.com/post-type/parent-post/child-post/ /* should work? */
http://mysite.com/newsletter/spring-2012/ /* works! */
http://mysite.com/newsletter/spring-2012/first-article/ /* 404 */
http://mysite.com/newsletter/spring-2012/second-article/ /* 404 */
J'ai également des «pages» de base standard avec des relations hiérarchiques créées, et elles ont la même apparence dans l'administration, mais elles fonctionnent également sur le front-end (les URL parent et enfant fonctionnent bien).
Ma structure de permalien est définie sur:
http://mysite.com/%postname%/
J'ai également tenté cela (simplement parce que tant d'autres réponses semblaient indiquer que c'était nécessaire, même si cela n'avait pas de sens dans mon cas):
http://mysite.com/%category%/%postname%/
Mon registre CPT args comprend:
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'has_archive' => 'newsletter',
'hierarchical' => true,
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'rewrite' => array( 'slug' => 'newsletter', 'with_front' => false ),
La seule différence visible entre mes enfants de type de message personnalisé et les enfants de page normaux , c'est que mon CPT a le slug au début de la structure de permalien, puis suivi par les slugs parent / enfant (où les pages commencent simplement par les slugs parent / enfant, pas de "préfixe"). Pourquoi cela salirait les choses, je ne sais pas. De nombreux articles semblent indiquer que c'est exactement la façon dont ces permaliens CPT hiérarchiques devraient se comporter - mais le mien, bien que bien formé, ne fonctionne pas.
Ce qui me déroute également, c'est quand j'examine les query_vars pour cette page 404 - ils semblent contenir les valeurs correctes pour que WP "trouve" mes pages enfants, mais quelque chose ne fonctionne pas.
$wp_query object WP_Query {46}
public query_vars -> array (58)
'page' => integer 0
'newsletter' => string(25) "spring-2012/first-article"
'post_type' => string(10) "newsletter"
'name' => string(13) "first-article"
'error' => string(0) ""
'm' => integer 0
'p' => integer 0
'post_parent' => string(0) ""
'subpost' => string(0) ""
'subpost_id' => string(0) ""
'attachment' => string(0) ""
'attachment_id' => integer 0
'static' => string(0) ""
'pagename' => string(13) "first-article"
'page_id' => integer 0
[...]
J'ai essayé cela avec différents thèmes, dont vingt-douze, juste pour être sûr que ce n'est pas un modèle manquant de ma part.
En utilisant l'inspecteur de règles de réécriture, voici ce qui apparaît pour l'URL: http://mysite.com/newsletter/spring-2012/first-article/
newsletter/(.+?)(/[0-9]+)?/?$
newsletter: spring-2012/first-article
page:
(.?.+?)(/[0-9]+)?/?$
pagename: newsletter/spring-2012/first-article
page:
comment son affiché sur une autre page d'inspecteur:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Cette sortie de réécriture me ferait croire que le permalien "non joli" suivant fonctionnerait:
http://mysite.com/?newsletter=spring-2012&page=first-article
Ce n'est pas 404, mais il montre l'élément "bulletin" du CPT parent, pas l'enfant. La demande ressemble à ceci:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
colonne.