web-dev-qa-db-ja.com

なぜグローバルに$ postを宣言するのですか?

私はWordpressの開発に慣れていません。そして$ post変数を明示的に宣言するための行を含む例を至る所に見ています。

global $post;

しかし、私はその行なしで私の使用をテストしました、そしてそれは顕著な違いを生じさせません。

なぜあなたは明示的に$ postを宣言すべきですか?

4
saricDen

チュートリアル(例1)では、post_parentからアクセスできるようにグローバル$ postを宣言する必要があります。そのような関数では、彼がそうしない限り、$ postはグローバル変数ではありません。

Codex(例2)では、サンプルコードは単なるサンプルであり、$ post変数がグローバル変数であることを明示的に示しているため、globalと宣言されています。

現在、テーマテンプレートはグローバル変数空間内で実行されるように含まれていますが(それらは関数内からではなくメイン実行スレッドから含まれています)、他のコードは含まれていないかもしれません。そのため、テンプレートの本体ではglobal $postを指定する必要はありませんが、関数では必要です。

WordPressはあらゆるスキルレベルのプログラマーを対象としています。あなたの目標が単にあなたのテーマやウェブサイトあるいはそれらの線に沿って何かに変更を加えることであるとき、あなたは物事を成し遂げることができるようにマスタープログラマーである必要はないはずです。 WordPressは、基本的な手続き型のコードから、時間をかけてよりオブジェクト指向でAPIベースに進化しました。そのため、コードベース内にこれらのような遺物があります。最初から新しいシステムを設計していたのであれば、さまざまな理由からグローバル変数を完全に使用しないようにするでしょう。 WordPressには下位互換性などのために多くのものが含まれており、変数のスコープを理解できないかもしれない「新しい」プログラマは、小さなコードをそのスコープのせいで機能しない場所にコピーすると混乱します。したがって、物事をグローバルとして宣言すると、問題が明示的に回避され、また問題の変数がグローバルスコープ内にあることを示すことによってコードがより明確になります。

また、私はこれについて多くのことを言わなければなりませんが、文書やチュートリアルのコード例は読まれ理解されるためのもので、コピーして貼り付けるものではありません。しかし、人々は関係なくコピーして貼り付けます。コードをコピーするのではなく、自分に何を伝えているのかを学び、自分のバージョンを最初から作成することをお勧めします。

11
Otto

グローバル変数$postは、ループ内で$wp_query->the_post()WP_Post )によって設定され、ループ中にアクセスできます。 $postは現在の投稿からの投稿データを保持します。

あなたがループの内側のときは、既にアクセス可能なので、$postグローバルを呼び出す必要はありません。outsideで、投稿データにアクセスする必要がある場合は、投稿データを使用できるようにするために$postグローバルを利用する必要があります。

7
Pieter Goosen