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
だけどね、十中八九。ただ、何らかのケースで値が入ることを想定しての処理。
いや、結局、一番クリーンな方法は、
the_content
フィルターを適用した後に、カスタムフィルター使う。それならパラメーターの互換性とか気にしなくてよくなる。1234$_sContent = apply_filters( ‘the_content’, $_sContent );$_sContent = apply_filters( ‘filter_the_content_after’, $_sContent, $oPost );