@toschoはこの答えにコメントを残しました。グローバルスコープ、特にポストグローバルについてはどの程度信頼する必要があり$post
ますか?
だから何?グローバル変数は、チェックを実行する前に全員から上書きできます。それがグローバル変数のポイントです:グローバルアクセス。
$post
たとえば、テーマ自体またはプラグインによって大部分が変更されるグローバルの1つです。それでも、たとえば関連する投稿を設定するために、特定のテンプレート内の他のアプリケーションで最も一般的に使用されるグローバルです。
カスタムクエリの使用に起因する特定の問題のいくつかの投稿への回答(およびコメント)から、ほとんどの問題はカスタムクエリがリセットされていないことが原因であることが際立っています(カスタムクエリはメインクエリによって設定されたグローバルを変更します)。
これから、$post
信頼できないことが明らかです。カスタムクエリを使用するコードの不完全な記述は、$post
グローバルを変更する可能性があり、その結果、何か(関連する投稿など)が破損します。
実際にはコアの内部動作について十分な知識があり、避けるべきものとそうでないものを知っているWordPress開発者はほんの一握りです。ユーザーの人口が多いため、WordPressコアがどのように動作するかはわかりません。
テーマをダウンロードしてプラグインをインストールするだけで、必要なことを実行したり、チュートリアルからコードをコピーしたりできます。彼らは、単一の投稿で関連する投稿を中断する、よく書かれていないプラグインをインストールするとします。どうして、それが原因で何がわかるのでしょうか?彼らはそれを自分で整理することができますか、それとも彼らはこの問題についてテーマ作者にメールを書いたり、このサイトに質問を投稿したりする100人目になるでしょうか?
私の質問:グローバルのようなもの$post
がそれほど信頼できないときに、他のインポートされたコードによって引き起こされるそのような問題からどのように保護できますか?$post
まったく同じようなグローバルを使用する必要がありますか?代替手段は何ですか?
結論を出す前にここで私の心を共有するために:を使用wp_reset_postdata()
するwp_reset_query()
前または使用する前に(および一部のテーマとプラグインでも見た)$post
、グローバルがメインクエリにリセットされることを確認しました$post
。しかし、他の誰かが自分のプラグインを適切にコーディングしなかったので、なぜ私のテーマでコードを膨らませなければならないのですか?また、誰かがカスタムクエリを適切にリセットした場合、この操作は不要な2回目に実行されますが、これは良くありません。
私が考えた2番目の方法は、$wp_query
などを使用してからそのメソッドを使用することです$wp_query->post
。
これに関するご意見をいただければ幸いです。