J'ai un type de message personnalisé tout mis en place. Je voudrais que le slug soit identique à un nom de page, car tous ces CPT seront interrogés sur cette page particulière (/ team-members).
Si je règle le slug Custom Post Type sur l'URL de la page, cette page particulière ne charge plus le modèle de page. Il charge un modèle de publication brisé.
Réécriture de mon type de message personnalisé:
$rewrite = array(
'slug' => 'team-members',
'with_front' => false,
'pages' => false,
'feeds' => false,
);
Cela me permet de générer l’URL appropriée de: http://www.example.org/team-members/bob-jones
Le problème, c’est que lorsque j’essaie d’accéder à la page: http://www.example.org/team-members/ , il ne restitue pas le fichier de modèle de page correct (justement intitulé page-team-members.php
). L'enregistrement des paramètres de permalien n'a pas fonctionné.
Comment puis-je créer le slug d'URL de mon type de message personnalisé pour ne pas interférer avec une page intitulée exactement la même chose?
Ce qui apparaît sur http://www.example.org/team-members/ est l'archive "type de publication" pour votre type de publication. C'est la liste générée automatiquement des articles créés par WordPress. Si vous ne souhaitez pas que le type de publication ait une archive, vous pouvez la désactiver en définissant l'argument has_archive
sur false:
register_post_type( 'post_type_name', array(
'has_archive' => false,
) );
Vous pouvez maintenant créer une page dans/team-members sans conflit.
J'ai trouvé au fil des années que le moyen le plus simple d'éviter ce type de conflit est de séparer les publications du CPT de la page en ajoutant une étape supplémentaire dans l'URL.
Par exemple, remplacez 'slug' => 'team-members',
par 'slug' => 'team-members/member',
pour que votre URL devienne http://www.example.org/team-members/member/bob-jones
Bien sûr, ce n'est pas idéal, et je préférerais que l'URL soit plus propre, mais vous devez parfois faire des compromis pour une vie facile :-)