如何缓存一个函数的快捷码输出?

时间:2013-06-08 作者:Philipp

我想在我的起始页上显示WordPress多站点中的帖子总数。这是500个博客中的近7000个。所以我做了一个函数,它必须遍历每个博客来统计帖子。当然,这需要很多时间,所以这个函数不是很有用。但是有没有办法说它应该将输出缓存一周?!

这是我的代码:

function posts_count_func( $args ){

    global $wpdb;
    $blogs = $wpdb->get_results( $wpdb->prepare(
            "SELECT * FROM {$wpdb->blogs} WHERE  spam = \'0\' 
            AND deleted = \'0\' AND archived = \'0\' 
            ORDER BY registered DESC, 2", ARRAY_A ) );

    $original_blog_id = get_current_blog_id();

     $args = array(
        \'numberposts\'     => -1,
        \'post_type\'       => \'post\',
        \'post_status\'     => \'publish\' );
    $total_network = $draft_network = 0;
    $total_sites = 0;

    foreach ($blogs as $blog)
    {
        wp_cache_flush();
        switch_to_blog( $blog->blog_id );
        $args[\'post_status\'] = \'publish\';
        if (count(get_posts($args))<2) { continue; }
        $total_posts = count( get_posts( $args ) );
        $total_network += $total_posts;
        $total_sites += 1;

        $args[\'post_status\'] = \'draft\';

        }

 return $total_network;

 switch_to_blog( $original_blog_id );
}
add_shortcode( \'posts\', \'posts_count_func\' );
非常感谢您,祝您玩得愉快!

1 个回复
最合适的回答,由SO网友:birgire 整理而成

你可以看看WordPress Transient API.

您应该能够存储您的短代码输出$total_network 具有

set_transient( \'my_shortcode_cache\', $total_network, WEEK_IN_SECONDS );
在哪里WEEK_IN_SECONDS 内置常量等于604800.

然后,您可以使用以下工具获取它:

get_transient( \'my_shortcode_cache\' );
如果您需要它在网络范围内工作,还存在set_site_transient()get_site_transient().

结束

相关推荐

Change order of posts

我最近发了一篇帖子,没有正确解释自己!再来一次,但要有更好的解释。我需要“选择选项”更改query\\u帖子的顺序。我当前的代码是:<select> <option selected=\"selected\">Select order of posts</option> <option>Highest price</option><!-- hypercart_meta_price \"order=DESC\