web-dev-qa-db-fra.com

$ wp_query initiation?

Je me demande quand WordPress lance sa requête principale qui définit le $wp_query global et nous permet d'utiliser les fonctions has_posts() et the_post(). Si je crée une page à l'aide d'un modèle d'archive, comment sait-il définir sa requête?

Je regarde le archive.php dans l’un des thèmes par défaut de WordPress. Ils ont une page d’archive mais ils appellent simplement get_header() et has_posts(), ce qui signifie que la requête est déjà définie. WordPress achemine-t-il l'URL pour utiliser le type de message personnalisé param dans l'URL?

Si je choisis de créer des pages d'archive personnalisées, où dois-je modifier la requête principale? Dans le nouveau fichier de modèle d'archive?

4
TurtleTread

L'utilisateur (Rarst } _ a un réponse très célèbre où il dispose le processus de chargement . En regardant ce graphique chaque fois que wp-blog-header.php est chargé, il appelle la fonction wp() qui configure de nombreux paramètres globaux WordPress tels que $post et $wp_query. ( Référence secondaire de l'utilisateur Gmazzap )

C'est l'aspect technique des choses, mais il semble que l'essentiel de vos questions consiste à créer vos propres pages d'archive personnalisées. WordPress possède une hiérarchie des modèles qui vous permet de créer archives personnalisées pour des éléments tels que les types de publication personnalisés.

Un autre moyen courant de modifier la requête principale consiste à utiliser un crochet dans votre fichier functions.php appelé pre_get_posts . Cela vous permettra de modifier l’objet de la requête avant que WordPress n’envoie une requête à la base de données afin d’obtenir les informations qui facilitent la modification de The Loop avec différents paramètres. Un exemple ressemblant à ceci pourrait modifier The Loop pour afficher 20 publications au lieu de 10 par défaut:

function wpse_265733( $query ) {

    // Don't run on admin
    if( $query->is_admin ) {
        return;
    }

    // Run only on the blog page
    if( is_home() ) {
        $query->set( 'posts_per_page', 20 );    // Set posts per page to 20.
    }

}
add_action( 'pre_get_posts', 'wpse_265733' );
2
Howdy_McGee

Une fois les plugins et les fonctions de thème chargés, WordPress analyse la requête entrante en variables de requête en parcourant la liste des règles de réécriture pour rechercher un modèle correspondant à la requête.

Il existe un certain nombre de règles par défaut pour les types intégrés - pages, archives diverses, vues uniques, pagination, flux. Vous pouvez ajouter manuellement vos propres règles ou points de terminaison, ou enregistrer de nouveaux types de contenu capables de générer automatiquement toutes ces règles pour votre contenu personnalisé.

Une fois la requête convertie en variables de requête, la requête est exécutée. Dans de nombreux cas, les résultats de la requête déterminent quel modèle est chargé.

Ensuite, bien sûr, le modèle est chargé et tout va bien.

Cela dit, un certain nombre d’actions et de filtres sont disponibles pour vous permettre de modifier les éléments à chaque étape. Pour avoir une vue plus détaillée du processus et de certaines de ces choses, jetez un coup d’œil à Action Reference .

La méthode la plus simple et la plus courante est l'action pre_get_posts . Cela expose les variables de la requête et vous permet de modifier des éléments avant l’exécution de la requête. Voir WP_Query pour une référence des vars de requête.

Si cela ne répond pas à vos besoins, consultez le filtre request , qui permet une manipulation plus radicale des requêtes, car il s'exécute directement après l'extraction d'une requête, avant que WordPress n'ait pris de décision quant au type de requête en cours .

3
Milo