减少或阻止调用UPDATE_META_CACHE

时间:2015-05-06 作者:Josh

我的主题每页调用update\\u meta\\u cache()函数58次!此函数将根据相关帖子运行以下查询:

SELECT post_id, meta_key, meta_value
-> FROM wp_postmeta
-> WHERE post_id IN (81649)
-> ORDER BY meta_id ASC
-> ;
返回的绝大多数meta\\u键(以及相应的值)对于相关页面不是必需的(例如,主页循环不需要yoast\\u wpseo\\u title、\\u edit\\u last、\\u edit\\u lock)。

有没有办法减少或防止调用update\\u meta\\u缓存?也许是在pre\\u get\\u posts挂钩上的函数中包含的一种方法?

2 个回复
SO网友:Anh Tran

无论何时使用该功能get_post_meta(), 将执行上述查询以获取所有post meta并存储在缓存中。你查询的帖子越多,查询的次数就越多。

为了减少查询的数量,我们应该pre-cache all meta values of all posts 在调用之前的查询中get_post_meta.

这是从中获取的示例代码a tutorial:

add_filter( \'posts_results\', \'cache_meta_data\', 9999, 2 );
function cache_meta_data( $posts, $object ) {
    $posts_to_cache = array();
    // this usually makes only sense when we have a bunch of posts
    if ( empty( $posts ) || is_wp_error( $posts ) || is_single() || is_page() || count( $posts ) < 3 )
        return $posts;

    foreach( $posts as $post ) {
        if ( isset( $post->ID ) && isset( $post->post_type ) ) {
            $posts_to_cache[$post->ID] = 1;
        }
    }

    if ( empty( $posts_to_cache ) )
        return $posts;

    update_meta_cache( \'post\', array_keys( $posts_to_cache ) );
    unset( $posts_to_cache );

    return $posts;
}

SO网友:plong0

对于WP_Query, 通过设置某些caching parametersfalse.

类似于WP_Term_Query, 它可以通过以下方式禁用:update_term_meta_cache => false 在查询参数中。

此外,过滤器update_{$meta_type}_metadata_cache 可用于禁用对象类型上所有查询的元数据缓存。(例如。update_post_metadata_cache, update_term_metadata_cache, etc)

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post