我想在我的起始页上显示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\' );
非常感谢您,祝您玩得愉快!
最合适的回答,由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()
.