web-dev-qa-db-ja.com

$ wp_query-> queried_object-> IDが警告を投げる:未定義のプロパティ

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

これはうまくいきますが、$current_term_id変数は警告を投げます…

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

ここで私が間違っていること、または現在の用語のIDの実際の所有物は何ですか。

5
mathiregister

私は何日もまったく同じ問題に直面し、それからこれを見つけました!関数$wp_query->get_queried_object_id()を使います。詳細については this を確認してください。

9

この関数のラッパーもあります get_queried_object_id() 。それはglobal $wp_queryのような全ての部分をそれ自身で呼び出します。

API

別の方法で強制されるまでは、常に最も低レベルのAPIを使用してください。

(現在の)ウィキペディアの記事によるAPIの定義は次のようになっています。

アプリケーションプログラミングインターフェース(API)は、互いに通信するためにソフトウェアコンポーネントによってインターフェースとして使用されることを意図した仕様である。

これは、それが coreの内部構造 およびあなたの theme または plugin と通信するように書かれていることを意味します。

どうして?

1つの簡単な理由のために:ラッピングAPIは、コアとして、 内部 を変換することを可能にします。ラッパー関数は、コアクラス/オブジェクトがそうでないかもしれないところに後方互換性を加えることができます。

それはまたあなたのコードを短くし、それをより読みやすくしそしてあなたがあなたのコードによってされる必要があることに集中することを可能にする。

4
kaiser

分類法アーカイブを使用している場合(is_tax()true)、queried_objectは次のように入力されます(私のサイトの例)。

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

だからあなたは直接名前と説明の両方を得る。使用できるコードは次のとおりです。

<?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には、潜在的な障害点がいくつかあります。

  • あなたのクエリはWP_Postオブジェクトを扱っていないかもしれません。 queried_objectは状況によっては分類法も参照できます
  • クエリで実際に結果が特定されていない可能性があります。 queried_objectはnullになる可能性があるため、存在しないオブジェクトのプロパティを求めています。
  • そのグローバルへの参照がないコードで$wp_queryを使うことができます。 $wp_query自体がnullであると判断した場合は、追加する必要があります。

    global $wp_query; 
    

    ...コードの上のどこかに.

1
Justin Bell