it-swarm.com.de

$ wp_query-> abgefragtes_Objekt-> ID löst Warnung aus: Undefinierte Eigenschaft

<?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>

Das funktioniert gut, aber die Variable $current_term_id gibt eine Warnung aus ...

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

Irgendwelche Ideen, was ich hier falsch mache oder was die eigentliche Eigenschaft für die ID des aktuellen Terms ist?

5
mathiregister

Ich stand tagelang vor genau dem gleichen Problem und fand es dann! Verwenden Sie die Funktion $wp_query->get_queried_object_id(). Überprüfen Sie dies für weitere Details.

9

Es gibt auch einen Wrapper für diese Funktion get_queried_object_id() . Es ruft alle Teile wie global $wp_query von selbst auf.

API

Verwenden Sie immer die niedrigste API-Stufe, bis Sie dazu gezwungen werden.

Die Definition der API im (aktuellen) Wikipedia-Artikel ist wie folgt

Eine Anwendungsprogrammierschnittstelle (API) ist eine Spezifikation, die von Softwarekomponenten als Schnittstelle für die Kommunikation untereinander verwendet werden soll.

Dies bedeutet, dass es geschrieben wurde, um mit Core-Interna und Ihrem Theme oder Plugin zu kommunizieren.

Warum?

Aus einem einfachen Grund: Mit einer Wrapping-API können Kerne Interna transformiert werden, bleiben aber mit allen Argumenten kompatibel. Eine Wrapper-Funktion kann Abwärtskompatibilität hinzufügen, wenn dies für eine Core-Klasse/ein Core-Objekt nicht möglich ist.

Außerdem wird Ihr Code verkürzt, lesbarer und Sie können sich darauf konzentrieren, was Ihr Code tun muss.

4
kaiser

Wenn Sie sich in einem Taxonomiearchiv befinden (is_tax() is true), wird der queried_object folgendermaßen ausgefüllt (Beispiel von meiner 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

So erhalten Sie direkt sowohl Name als auch Beschreibung. Der Code, den Sie verwenden können, ist:

<?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

$wp_query->queried_object->ID weist mehrere potenzielle Fehlerquellen auf:

  • Ihre Anfrage befasst sich möglicherweise nicht mit einem WP_Post Objekt. Der queried_objectkann unter bestimmten Umständen auch auf eine Taxonomie verweisen .
  • Ihre Anfrage hat möglicherweise noch keine Ergebnisse ergeben. Ihr queried_object könnte null sein, und daher fragen Sie nach einer Eigenschaft für ein nicht vorhandenes Objekt.
  • Möglicherweise verwenden Sie $wp_query in Code, der keinen Verweis auf dieses globale Element enthält. Wenn Sie feststellen, dass $wp_query selbst null ist, sollten Sie hinzufügen

    global $wp_query; 
    

    ... irgendwo über deinem Code.

1
Justin Bell