unsureWordPress

Michael Uno

the_content フィルターのコールバック内で投稿タイプのチェックを行うため get_post() してたのだけど、REST API のカスタム end point でマークアップ出力の為に呼び出された時、$GLOBALS['post'] が定まってないみたいで null を返す。

さあ、どうしましょうか、これ。

Walker クラスを使いまわしたいので、できれば JavaScript 側で整形するとかは避けたい。ツリー表示って結構複雑だし。

Postscripts
  • 少し邪道だが、apply_filters( 'the_content', $sContent, $oPost ) という具合に、2つ目のパラメーターで渡してあげる。コアはこのフィルターに関しては2つ目以降のパラメーターはサポートしていない。これ、もしコアの仕様変更で2つ目のパラメーターに何か別の値が渡されるとかいうことになると、問題。

    なので、一応コールバックの中で、タイプチェックとして instanceof WP_Post でチェックしてる。これも完全ではないけど、まあ許容範囲かなと。

    • もう一つ対処法として、各投稿の出力を REST 側で呼び出す直前に、$GLOBALS[ 'post' ] の値を控えておいて、目的のポストオブジェクトを代入して、呼び出しが終わったら、控えておいたやつを戻してあげる。控えておくといっても null だけどね、十中八九。ただ、何らかのケースで値が入ることを想定しての処理。

  • codePHPWordPress

    いや、結局、一番クリーンな方法は、the_content フィルターを適用した後に、カスタムフィルター使う。それならパラメーターの互換性とか気にしなくてよくなる。

Add a Postscript

Your email address will not be published. Required fields are marked *