web-dev-qa-db-fra.com

Comment fonctionne la variable globale $ post_type?

J'ai besoin de sortir le nom du type de message personnalisé dans archive.php et single.php.

Je voudrais utiliser quelque chose comme ça:

if ( 'staff' == get_post_type() ) {

$post_type = 'staff';

}

echo '<div class="'.$post_type.'">Content</div>';

Cela me donnerait le résultat requis de <div class="staff">

Cependant, il semble que je puisse aussi accéder à la variable globale appelée $post_type et simplement l'afficher sur archive.php ou single.php même sans déclarer global, par exemple ceci archive le même résultat que ci-dessus:

<div class="<?php echo $post_type; ?>">

Le Codex indique que la variable globale $post_type doit être utilisée dans la zone d'administration de Wordpress.

Mes questions sont:

  1. Pourquoi $post_type fonctionne-t-il sans d'abord le déclarer globalement?
  2. Est-ce une bonne idée d'utiliser la variable globale $post_type, comme indiqué ci-dessus, dans les modèles de thème?

Je vous remercie

1
Dave

Le $post_type global provient généralement de la variable de requête publique de la requête principale $wp_query, mais get_post_type() est le type de publication de l'objet $post actuel, dans la boucle.

Donc pour par exemple boucles secondaires cela peut être différent.

Le $post_type global peut ne pas toujours être défini, car le type de publication par défaut pour WP_Query est le type de publication post.

De WP::register_globals(), nous pouvons voir comment la variable de requête post_type devient globalement accessible:

// Extract updated query vars back into global namespace.
foreach ( (array) $wp_query->query_vars as $key => $value ) {
    $GLOBALS[ $key ] = $value;
}

comme je l'ai signalé dans ma réponse récente ici .

En général, j'utiliserais les appels d'API WordPress au lieu d'utiliser des globales directes, car le premier est généralement conçu pour traiter divers cas, y compris les valeurs par défaut, et est mis à jour si nécessaire.

Travailler directement avec les globals augmente le risque de les dépasser.

Si votre objectif est de configurer certains sélecteurs CSS, vous pouvez souvent utiliser ceux fournis pour la balise <body>, avec la fonction principale body_class(). Considérez également la fonction post_class() core dans votre boucle, car elle contient déjà les informations de classe du type de publication.

4
birgire