web-dev-qa-db-fra.com

WordPress continue à chercher la page d'archive au lieu de la page de modèle

J'ai créé un modèle, créé une page dans WordPress et choisi le modèle correspondant dans le menu déroulant. J'ai créé des modèles pour plusieurs pages de ce site et ils ont tous bien fonctionné. Cependant, ce modèle pose des problèmes. WordPress continue à aller chercher la page d'archive pour une raison quelconque. La classe de corps exacte est la suivante: archive post-type-archive post-type-archive-teams logged-in

Voici le modèle que j'ai créé.

        <?php get_header();?>

            <section id="content">

                <?php
                    $temp = $wp_query;
                    $wp_query = null;
                    $wp_query = new WP_Query();
                    $wp_query->query('post_type=teams&posts_per_page=7');

                    while ( $wp_query->have_posts() ) : $wp_query->the_post();

                ?>

                <article class="post team" id="post-<?php the_ID(); ?>">
                    <h2><?php the_title(); ?></h2>
                    <section class="entry">
                                      content here
                    </section>
                </article>

                <?php
                    endwhile; 
                    $wp_query = null;
                    $wp_query = $temp;
                    wp_reset_query();
                ?>
            </section>

        <?php get_sidebar(); ?>

        <?php get_footer(); ?>

Quelqu'un peut-il m'aider à comprendre pourquoi cela ne fonctionne pas?

4
SamY

Mon problème était research n'utilisait pas page-research.php mais plutôt archive.php

Je ne l'ai pas résolu par la solution "Les pages statiques et les types de publication personnalisés ne peuvent pas avoir le même slug", mais sur le tableau de bord dans Paramètres -> Permaliens.

C'était sur "Jour et nom" et je l'ai changé en "Numérique" et la page de recherche chargée à partir de page-research.php

2
Bruce Robinson

L’approche la plus élémentaire consiste à faire ce que je fais: lors de la création de pages de modèle, je les précède de "modèle_".

Ainsi, si vous souhaitez un modèle team.php pour une page, recherchez template_team.php.

De plus, vous avez un code sur votre page dont vous n'avez pas réellement besoin.

Je voudrais changer votre code pour être simplement:

 <?php get_header();?>

        <section id="content">

            <?php
                $wp_query = new WP_Query();
                $wp_query->query('post_type=teams&posts_per_page=7');

                while ( $wp_query->have_posts() ) : $wp_query->the_post();

            ?>

            <article class="post team" id="post-<?php the_ID(); ?>">
                <h2><?php the_title(); ?></h2>
                <section class="entry">
                                  content here
                </section>
            </article>

            <?php
                endwhile; 
                wp_reset_query();
            ?>
        </section>

    <?php get_sidebar(); ?>

    <?php get_footer(); ?>

Et la raison pour laquelle je voudrais apporter ces modifications est que vous n'utilisez pas réellement $ temp, il n'y a donc aucune raison de l'affecter. De plus, vous n'avez aucune référence à une requête wp_query lors du chargement de la page et même si vous ne l'utilisiez pas ailleurs dans la page.

Vous instanciez une toute nouvelle requête (à l'aide du mot clé NEW) et, en ce qui concerne la page, il s'agit de la seule requête que vous avez sur la page. C'est donc la seule requête à réinitialiser.


Ce qui se passe réellement, c’est que vous cliquez sur un lien et que vous êtes dirigé vers la page "équipes". Ceci charge le "template_teams.php" et toutes les variables sont assignées à $ post pour cette page dès le chargement de la page. $ Post contient le contenu réel de la page que vous avez créée dans l’éditeur de texte WordPress et à laquelle le modèle a été attribué.

Maintenant, si vous avez besoin d’une requête différente en plus de celle par défaut chargée avec la page, vous pouvez facilement changer votre variable de $ wp_query en quelque chose de plus pertinent que ce que vous voulez:

$custom_query_1 = new WP_Query();
$custom_query_1->query('post_type=teams&posts_per_page=7');

Vous pourrez alors utiliser la requête par défaut ET votre requête personnalisée n'importe où dans la page à tout moment. L'utilisation de la fonction de nettoyage wp_reset_query () est idéale à utiliser après chaque boucle, MAIS toutes les requêtes sont effacées.

Pour éviter que cela ne supprime les requêtes personnalisées, vous pouvez simplement placer la nouvelle requête uniquement là où vous en avez besoin.

1
Neil Davidson