テンプレート内で$postが使えなくなる点について

ホーム フォーラム一覧 YASAKANI Cache フォーラム テンプレート内で$postが使えなくなる点について

  • このトピックには3件の返信、2人の参加者があり、最後にenomotoにより6年、 1ヶ月前に更新されました。
4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • 投稿者
    投稿
  • #6108
    Anonymous
    メンバー

    立て続けにすいません、内容が別なのでトピックを建て直させていただきました。

    たとえば、single.phpや、page.phpなどで、

    $post->ID などのように、$postを利用している場合、YASAKANI Cacheの設定で、ページキャッシュを有効にすると、$post が Null になってしまいます。そこで、

    global $post;

    を$postをつかう前に入れると、問題なくなります。

    現状はこれで解決しているのですが、プラグイン側で対策できればいいな、と思いました。

    #6109
    enomoto
    キーマスター

    WordPress テーマのテンプレートファイルの呼び出し方の違いが影響しているようなのですが、原因がわかりません

    Yasakaniキャッシュでは、single.php や page.php などのテンプレートファイルの呼び出し処理部を ob_start() と ob_get_clean() を使ってバッファリングして、その出力データをキャッシュとして保存しています。

    このバッファリング処理でグローバル変数が破棄されるような挙動となってしまっているようです

    グローバル宣言をテンプレート内で宣言していない一部のテーマの場合はご指摘のように問題が起こる場合がありますが、テンプレートファイル内で、きちんとグローバル宣言してから変数を使っている多くのテーマ(テンプレート)では問題なく Yasakani キャッシュを使っていただいていると思っています

    プラグイン側での対策ができればよいのですが、現時点では対応方法がわからないので何か情報があれば教えて下さい m(__)m

     

     

     

    #6110
    Anonymous
    メンバー

    グローバル宣言してから変数を使っている多くのテーマ(テンプレート)では問題なく Yasakani キャッシュを使っていただいていると思っています

     

    なるほど。
    たまたまうまく動いていただけで、本来はグローバル宣言してからつかうべきなのですね。よくわかりました。

    もし、他になにかわかればお知らせします。

    ありがとうございます。

    #6111
    enomoto
    キーマスター

    たまたま動いているは、ちょっと言いすぎかも

    例えば $a とグローバル宣言してあるファイルから、include でテンプレートファイルを読み込んだ時に、そのテンプレートファイル内で(関数内でなく)$a 変数を参照すればグローバルスコープの変数として扱われると書かれているので、別ファイルになっていても暗黙の内にグローバルとして扱われるようです

    ただ、ob_start でバッファリングした時は、何故かその暗黙のグローバルスコープとして継承されずに、未初期化のグローバル変数と見なされてしまうような感じです

    何故そうなるのか、私の処理でなにか抜けているのか、そこはよくわかりません (^_^;)

    ただ、明示的にグローバルと宣言してあげれば、きちんと扱えますので、今のところは暗黙のグローバルスコープの継承に頼らずに明示的に再度ファイル内でグローバル宣言が必要になってしまっているということです

    従って、このような問題が起こる可能性もあるので、プログラムを別ファイルに分けた場合には、念のため明示的にグローバル宣言をしておくほうが良いようです

     

     

4件の投稿を表示中 - 1 - 4件目 (全4件中)
  • このトピックに返信するにはログインが必要です。
go-to-top