グローバルな$ post変数をいつ、なぜ使うべきかを理解しようとしています。私は、ループの外で、投稿ページで次のことをやろうとしました、そして予想通りそれは働きます。
<?php
global $post;
echo $post->ID;
?>
以前の投稿ページから上記のコードを削除したとしても、アーカイブページで同じことをした場合(どうなったのかを確認したいだけです)、何らかの理由で前の投稿のIDを取得することもできます。これはある種のキャッシュのようなものですか?これはどのように正確に機能しますか?
Functions.phpの機能に取り組んでいる場合、グローバル$ postが役に立つことを理解しています。これは唯一のユースケースですか?
どうもありがとう
これはおそらく広すぎる質問なので、うまく答えることはできません。 $post
グローバルは、あらゆる種類の方法で使用できます。 shouldを使用すべきかどうかは、それぞれの状況に依存します。
ただし、私が理解しているように、$post
globalの主な目的は、テーマテンプレートファイルでの使用です。
the_title()
またはthe_content()
またはthe_author()
または非常に多くのテンプレート関数のいずれかを使用すると、WordPressは$post
グローバルでこの情報を探します。一般的なルールとして、テンプレートファイルで作業するときは、$post->ID
に直接アクセスする代わりに、get_the_ID()
などのこれらのテンプレート関数を常に使用する必要があります。
したがって、$post
グローバルをよりよく理解したい場合は、WordPress、特にテンプレートファイル内で The Loop がどのように機能するかを読んでください。ループがthe_post()
を実行すると、現在のアイテムでグローバルが設定されます。
テンプレートファイルでは、通常、自動的に実行されるクエリのループを反復処理します。たとえば、単一のページにアクセスすると、WordPressはそのページのクエリを実行し、page.php
テンプレートをロードすることを認識します。
メインループの外側、たとえばfunctions.php
などの追加の投稿を取得する場合は、独自の WP_Query を実行し、ループを開始してからテンプレート関数を使用します。既存の関数を介して必要な情報にアクセスできない場合にのみ、$post
グローバルに直接アクセスします。
独自のWP_Query
のループが完了したら、$post
グローバルがカスタムクエリにスタックしていることがわかります。そのため、たとえば、単一ページテンプレートでは、カスタムループの後、$post
に現在のページが設定されていない可能性があります。 wp_reset_query を使用すると、$post
グローバルを以前の状態に復元できます。これは絶対に重要です、そうでなければ元の$post
グローバルを期待する他のプラグインやテーマを壊すことができます。
この質問が他のいくつかの問題に取り組むとき、私はこれに関していくつかの情報を欠いていたかもしれない投稿を1〜2回行いました。私はまたあなたが ここ をチェックできる質問を@ G.Mからのすばらしい答えと共に尋ねました。
基本的に、$post
グローバルは$wp_query->the_post()
によって設定され、ループ内だけでなくテンプレート全体を通してアクセス可能です。これがグローバルと呼ばれる理由です。
これは 現在のソースです
3681 public function the_post() {
3682 global $post;
3683 $this->in_the_loop = true;
3684
3685 if ( $this->current_post == -1 ) // loop has just started
3686 /**
3687 * Fires once the loop is started.
3688 *
3689 * @since 2.0.0
3690 *
3691 * @param WP_Query &$this The WP_Query instance (passed by reference).
3692 */
3693 do_action_ref_array( 'loop_start', array( &$this ) );
3694
3695 $post = $this->next_post();
3696 setup_postdata($post);
3697 }
3698
これから、アーカイブページの最後の投稿を$post
として取得する理由についての質問への回答も得られます(それに関しては任意のページ)。 $post
は常に$wp_query->next_post()
を介して返される$posts
配列の最後の投稿に効果的に設定されます
あなたはこのグローバルな outside ループをカスタムクエリとして使うことに非常に慎重にならなければならず、いくつかの関数はそれにアクセスしてリンクされた記事で説明されるようにその値を変えることができます。これが、ポストデータをWP_Query
の新しいインスタンスから常にリセットする必要がある理由の1つです。 query_posts
もメインのクエリを壊すのでこのグローバルを壊します、なぜならquery_posts
は絶対に避けなければならない理由の一つです
これは現在のテンプレートの外側にあるので、基本的には関数内でグローバル$post
を定義する必要があるだけですが、望むならループの外側にグローバルを定義することができます。
結論として、$post
グローバルは関数によって非常に簡単に修正されることができる最も信頼できないグローバルの1つであるので、私は@ G.Mによる勧告を使うことを提案するでしょう。リンク先の質問