web-dev-qa-db-fra.com

get_queried_object () renvoie la valeur null dans l'archive post-date

get_queried_object() renvoie null dans les archives de la date de publication (type de page is_date()) et la page d'index principal du blog (type de page is_home()). Est-ce intentionnel ou juste un oubli?

J'écrivais un wrapper autour de get_queried_object () pour obtenir le titre de la page en cours, quel que soit le type de page, à utiliser dans un thème. Je me suis vite rendu compte qu'au lieu d'utiliser get_query_object(), je devrais simplement dupliquer les éléments importants de wp_title() , mais avant cela, je suis tombé sur un problème intéressant.

Il semble que get_queried_object() et sa fonction racine WP_Query->get_queried_object() return null pour quelques types de listes, y compris la sortie de liste de messages primaires par index.php (type de page is_home()) et archives de publication par date (type de page is_date()).

J'ai testé cela en insérant l'extrait de code suivant dans un certain nombre de fichiers de modèle situés à plusieurs endroits, toujours après get_header() et avant the_post():

<pre><code><?php
    $queried_object = get_queried_object();
    var_dump( $queried_object );
?></code></pre>

Cela fonctionne parfaitement sur les archives de catégories, les archives de balises, les archives de taxonomie personnalisée et les archives de type publication personnalisées. get_queried_object() renvoie l'objet de requête, qui peut être utilisé pour extraire un titre de page et d'autres informations utiles.

Cependant, il échoue dans archive.php pour les archives de date de publication standard et index.php pour la vue de liste de page d'accueil de publications de blog normales.

Creuser dans la source de WP_Query->get_queried_object() révèle quelque chose d'assez surprenant: il n'y a pas de vérification du type de page is_home() ou du type de page is_date(); les types de page $this->queried_object = null; ne sont donc pas mis à jour et la fonction renvoie null.

Ma question est donc la suivante: cette fonctionnalité est-elle destinée (par exemple, n'êtes-vous pas censé utiliser get_queried_object () sur ces pages), une limitation technique (n'y a-t-il pas d'objet significatif à renvoyer sur ces pages) ou simplement une supervision de la mise en œuvre?

Existe-t-il même un équivalent de l'objet de type publication personnalisé pour le type de publication "publication de blog" intégré à afficher?

7
Dakota

ma question est donc la suivante: cette fonctionnalité est-elle destinée (par exemple, n'êtes-vous pas censé utiliser get_queried_object () sur ces pages), une limitation technique (n'y a-t-il pas d'objet significatif à renvoyer sur ces pages) ou simplement une supervision de la mise en œuvre?

get_queried_object () consiste à obtenir le terme, l'auteur, une publication unique, un type de publication personnalisée unique ou un objet de page interrogé. Oui, c'est intentionnel et ce que cette fonction a été conçue pour faire.

Si vous vous trouvez dans une archive de date, une page d’accueil ou une recherche, aucun objet n’est interrogé.

Modifier:

Sur la base du premier commentaire ci-dessous, l'OP doit obtenir l'objet post_type. L'objet post_type est différent de l'objet interrogé. Si vous devez obtenir l'objet post_type sur une page d'archivage, vous pouvez l'obtenir à partir de query_vars.

global $wp_query;

$post_type_object = get_post_type_object( $wp_query->query_vars['post_type'] );
3
Chris_O