私は私のスタートページにWordPress Multisiteの中の投稿の総数を見せたいのです。それらは500のブログで7000近くあります。だから私は投稿を数えるためにすべてのブログを通過しなければならない関数を作りました。多くの時間がかかるので、この関数はあまり役に立ちません。しかし、1週間としましょうから出力をキャッシュすると言う方法はありますか。
これが私のコードです:
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' );
どうもありがとうございました。
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()
もあります。