这一切都是为了将帖子添加到缓存中。这样做的好处是get_post( $post_id )
不会导致再次命中数据库。这可能与循环调用中的许多模板函数相同get_post()
.
我不完全理解表达的逻辑$split_the_query
. 这个限制很有意义,因为很大的限制可能是一些批处理过程,而不是由主题显示。
以下代码是条件逻辑:
if ( $split_the_query ) {
// First get the IDs and then fill in the objects
$this->request = "SELECT $found_rows $distinct $wpdb->posts.ID FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits";
$this->request = apply_filters( \'posts_request_ids\', $this->request, $this );
$ids = $wpdb->get_col( $this->request );
if ( $ids ) {
$this->posts = $ids;
$this->set_found_posts( $q, $limits );
_prime_post_caches( $ids, $q[\'update_post_term_cache\'], $q[\'update_post_meta_cache\'] );
} else {
$this->posts = array();
}
} else {
$this->posts = $wpdb->get_results( $this->request );
$this->set_found_posts( $q, $limits );
}
$ids = $wpdb->get_col( $this->request );
这将获得调用返回的ID数组。
if ( $ids )
如果该值为false,则不会返回帖子,因此只需将帖子设置为空数组即可。
_prime_post_caches( $ids, $q[\'update_post_term_cache\'], $q[\'update_post_meta_cache\'] );
这会告诉WordPress缓存为缓存捕获新的帖子ID。您会注意到,您可以在查询关联数组中传递两个查询参数,以告知要更新哪些缓存。
奇怪的是,自定义帖子类型会导致问题,而默认的post
帖子类型不会给你带来任何问题。您可能只想将这两个查询变量设置为false,以防止缓存。
当我在谷歌上搜索时,看起来其他人也有你的问题update_post_caches out of memory
.