web-dev-qa-db-ja.com

グローバル変数を使用することの欠点は何ですか?

私はWordPressの初心者です。私の "最近の投稿"のショートコードでは、私はglobal $post変数を使用しました。なぜならthe_title()関数は投稿のタイトルではなくページのタイトルを与えてくれたからです。よくわからないが、それはループの中のループのせいだと思った。

上級ユーザーの中には、global変数を使用しないように指示している人もいるので、私の「最近の投稿」のショートコード内でglobal $post変数を使用するのはいいのかどうか。

1

global変数$postは、メインクエリの最初の投稿に設定されます。メインのループでも任意の数のセカンダリのループでも、いずれかのループが実行されると(正しく構成されていると仮定して)、$postがそのループ内の各投稿に順番に設定されます。ループの終わりには、最後に実行されたループの最後の投稿に設定されます。関数 wp_reset_querywp_rest_postdata は、多くの場合、これを解決するのに役立ちます。 。

問題はあなたの「ループの内側のループ」の構築であると確信していますが、あなたはコードをポストしていないので、私ができることはすべて推測することです。私は、あなたには次のようなものがあると思います。

$recent = get_posts(/*...*/);
foreach ($recent as $r) {
  the_title();
}

そしてあなたが必要です:

$recent = new WP_Query(/*...*/);
if ($recent->have_posts()) {
  while($recent->have_posts()) {
    $recent->the_post();
    the_title();
  }
}
wp_reset_postdata();
1
s_ha_dum

不利な点は、あなたがループの内側にいると確信していない限り、global $postがあなたに予期しない結果をもたらすことがあるということです。

ウィジェットや他のプラグインは、投稿を巻き戻したり、投稿を別の位置にループしたりすることで、望んでいなかったり期待していなかったりする結果になる可能性があるその他のアクションを実行できます。

あなたのショートコードがどこで実行されているのかわからないので、それがループの外側にあるかもしれず、そして予期しない結果をもたらすかもしれません。

あなたのショートコードが最近の投稿をリストすることになっているならば、それは間違いなくglobal $postの正しい応用ではありません - あなたは調べる必要があります カスタムループを書くために書く メインループに影響を与えずに、最近の投稿を取得します。

2
cale_b