我使用 the_posts 过滤器为每个查询的帖子添加一个对象。$post
访问添加的对象时,我使用or得到不同的结果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
,有时会得到 obj,有时不会(即使是同一篇文章):
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 可能会首先处理缓存过程。然后,其他缓存插件可以在我的 obj 上工作,就像在标准 WP 帖子上工作一样。