web-dev-qa-db-fra.com

L'archive personnalisée de type archive prend la place de l'URL de page

J'ai des problèmes avec les archives pour un type de message personnalisé.

  • J'ai une page WordPress à /address/
  • J'ai créé des publications personnalisées dynamiques qui doivent apparaître à /address/post#/

Lorsque j'active cette fonctionnalité, la page WordPress située à /address/ est remplacée par l'archive de messages personnalisés.

Comment puis-je empêcher cela de se produire? Je veux que la page WordPress apparaisse à /address/ au lieu de l'archive.

2
Cyrus

Lorsque vous enregistrez votre type de publication, définissez l'argument has_archive sur false. Si vous le modifiez, n'oubliez pas de vider vos règles de réécriture pour voir le changement.

Maintenant, cela fonctionne bien si, comme vous l'avez demandé, vous souhaitez afficher la page et non les archives. Qu'en est-il de la situation dans laquelle vous souhaitez afficher le contenu de la page ainsi que la liste des publications personnalisées?

Vous pouvez utiliser deux approches pour y parvenir.

1 - Utiliser un modèle de page

C’est celui que je vois le plus souvent sur le Web. Créez un modèle de page et, après avoir affiché le titre et le contenu, utilisez une boucle personnalisée pour afficher vos publications. Cela fait le travail, mais les gens semblent être souvent dérangés par une pagination adéquate.

2 - Page pour les messages personnalisés

Ceci est mon approche préférée. Je garde has_archive lorsque j'enregistre mon type d'article et que je crée une page normale à utiliser avec le modèle d'archive. Le slug de la page correspond au slug de l'archive. Par défaut, les règles de réécriture de WP sont ordonnées de manière à ce que l'archive l'emporte sur la page.

Au début de mon modèle archive-{post_type}.php, je place ceci:

$queried_object = get_queried_object();

$page_data = get_page_by_path( $queried_object->rewrite['slug'] );

/* no need to check our context, as we know that this 
   code will only run for our CPT archives
*/

if ( !is_single() ) {
    echo apply_filters('the_content', $page_data->post_content);
}

// process the content in the same way that the_content would within a loop

// Now go into your usual archive loop...

Si vous préférez, vous pouvez utiliser un identifiant de page ou même configurer une option pour votre type de publication qui équivaut à la page intégrée pour les publications.

De cette façon, vous n'avez pas à reconstruire vous-même la requête d'archive la plus difficile.

4
Andy Macaulay-Brook

Merci à tous pour votre aide.

Andy m'a mis sur la bonne voie. Je devais juste ajouter:

flush_rewrite_rules ();

Merci encore!

0
Cyrus