_posts フィルターを使用して、クエリされた各投稿にオブジェクトを追加します。追加されたオブジェクトにアクセスすると、$post
またはを使用して異なる結果が得られますget_post
。
オブジェクトを投稿に添付するコードは次のとおりです。
add_filter( 'the_posts', 'populate_posts_obj', 10,2 );
function populate_posts_obj( $posts, $query ){
if ( !count( $posts ) || !isset($query->query['post_type']) )
return $posts;
if( in_array( $query->query['post_type'], get_valid_grade_types())){
foreach ( $posts as $post ) {
if ( $obj = new Gradebook( $post->ID ) )
$post->gradebook = $obj;
}
}
return $posts;
}
次に、 経由で obj にアクセスし、obj を$post
取得する場合と取得しない場合があります (同じ投稿であっても):
function get_the_gradebook(){
global $post;
return isset($post->gradebook) ? $post->gradebook : null;
}
経由で obj にアクセスしget_post()
、常に obj を取得します。
function get_the_gradebook(){
global $post;
$p = get_post($post->ID);
return isset($p->gradebook) ? $p->gradebook : null;
}
バージョンそのままでもいいget_post()
のですが、なぜ違うのか分かれば助かります。
追加情報:
各投稿に obj を添付する理由を尋ねると、WordPress が最初にキャッシュ プロセスを処理する可能性があると思います。次に、標準の WP 投稿で作業しているかのように、他のキャッシュ プラグインを obj で使用できます。