web-dev-qa-db-ja.com

get_the_ID()は404ページに通知する

私はいくつかの必要性のために私のwp_enqueue_scriptsアクションでget_the_ID()を使用しています。

Notice:C:\ wamp\www\WordPress\wp-includes\post-template.phpの29行目にある非オブジェクトのプロパティを取得しようとしています

私はなぜこれが起こるのか知っています、私の質問はなぜこれが起こるべきですか? WordPressは404に割り当てられた$ postがないことを知っていて空の結果を返すことになっていませんか?

私は使用する必要がありますか:

if( !is_object($post) ) return;

私はその通知を取り除くためにget_the_ID()を使用していますか?

7
metalzade

get_the_ID()は壊れています。

function get_the_ID() {
    return get_post()->ID;
}

IDオブジェクトを返す関数でメンバーpostを使用しようとします 時には

/* 
 * @return WP_Post|null WP_Post on success or null on failure
 */
function get_post( $post = null, $output = OBJECT, $filter = 'raw' ) {

get_posts()NULLを返すことができ、NULLはオブジェクトではないのでメンバーIDを持ちません。

404ページにはグローバルなpostオブジェクトはありません。 $postはグローバル変数なので、 どこでも、 単一のページでも削除できます。

そのため、get_the_ID()を使用するときはいつでも、postオブジェクトをテストする必要があります。

if ( get_post() )
{
    $id = get_the_ID();
    // do something
}

ここで学ぶべき2つのレッスンがあります:

  1. WordPress APIを決して信頼しないでください。コードを読み、その制限を理解してください。
  2. あなた自身のコードでグローバル変数を避けてください。一人一人を 深刻なバグ として扱い、すぐにそれを取り除きます。
8
fuxia

404ページにいるかどうかを確認することができます。

if( is_404() ) {
    return;
}
get_the_ID();
// ...

参照

is_404()

0
Pat J