web-dev-qa-db-fra.com

$ wp_query-> queried_object-> ID émet un avertissement: propriété non définie

<?php 
    $current_term = $wp_query->queried_object->name;
    $current_term_id = $wp_query->queried_object->ID;
?>

<hgroup class="section-heading wrapper">
    <h1><?php echo $current_term; ?></h1>
    <h3><?php echo category_description( $current_term_id ); ?></h3>
</hgroup>

Cela fonctionne bien, mais la variable $current_term_id émet un avertissement…

Notice: Undefined property: stdClass::$ID in /Users/my/htdocs/wr/wp-content/themes/wr/taxonomy-event_type.php on line 12

Des idées que je fais mal ici ou quelle est la propriété réelle de l'ID du terme actuel?

5
mathiregister

J'ai fait face au même problème pendant des jours et j'ai trouvé ça! Utilisez la fonction $wp_query->get_queried_object_id(). Vérifiez this pour plus de détails.

9
Rutwick Gangurde

Il y a aussi un wrapper pour cette fonction get_queried_object_id() . Il appelle toutes les parties comme global $wp_query par lui-même.

API

Utilisez toujours l'API la plus basse, jusqu'à ce que vous soyez obligé de faire autrement.

La définition de l’API par l’article (en cours) de wikipedia est la suivante:

Une interface de programmation d'application (API) est une spécification destinée à être utilisée comme interface par les composants logiciels pour communiquer entre eux.

Cela signifie qu'il a été écrit pour communiquer avec core internals et votre theme ou plugin .

Pourquoi?

Pour une raison simple: une API d'habillage permet aux cœurs internals de se transformer, tout en restant compatibles avec tout ce que vous utilisez comme arguments. Une fonction wrapper peut ajouter une compatibilité ascendante là où une classe/objet principale ne peut pas.

Cela raccourcit également votre code, le rend plus lisible et vous permet de vous concentrer sur ce qui doit être fait par votre code.

4
kaiser

Lorsque vous êtes sur une archive de taxonomie (is_tax() est true) queried_object est rempli de cette façon (exemple de mon site):

public 'queried_object' =>
object(stdClass)[163]
public 'term_id' => int 2
public 'name' => string 'Puglia' (length=6)
public 'slug' => string 'puglia' (length=6)
public 'term_group' => int 0
public 'term_taxonomy_id' => int 7
public 'taxonomy' => string 'region' (length=6)
public 'description' => string 'Bari, Brindisi, Lecce, Taranto, Foggia' (length=38)
public 'parent' => int 0
public 'count' => int 1
public 'filter' => string 'raw' (length=3)
public 'queried_object_id' => int 2

Donc, vous obtenez directement le nom et la description. Le code que vous pouvez utiliser est:

<?php 
    $current_term_name = $wp_query->queried_object->name;
    $current_term_description = $wp_query->queried_object->description;
?>

<hgroup class="section-heading wrapper">
    <h1><?php echo $current_term_name; ?></h1>
    <h3><?php echo $current_term_description; ?></h3>
</hgroup>
2
Giovanni Putignano

$wp_query->queried_object->ID a plusieurs points de défaillance potentiels:

  • Votre requête ne traite peut-être pas avec un objet WP_Post. Le queried_objectpeut également faire référence à une taxonomie dans certaines circonstances .
  • Votre requête n'a peut-être pas identifié de résultats. Votre queried_object peut être null et vous demandez donc une propriété sur un objet inexistant.
  • Vous pourriez utiliser $wp_query dans le code sans référence à cette variable globale. Si vous déterminez que $wp_query lui-même est nul, vous devez ajouter

    global $wp_query; 
    

    ... quelque part au-dessus de votre code.

1
Justin Bell