Est-il possible d'afficher le nombre total de publications pour tous les blogs d'un réseau? get_blog_count
et get_user_count
le font pour les blogs et les utilisateurs, mais je ne trouve aucune méthode permettant de le faire pour le nombre de publications.
Nous avons apporté quelques modifications à l'exemple de brasofilo, qui nous posait des problèmes d'exécution de la mémoire; l'une d'elles peut être liée à une éventuelle fuite de mémoire switch_to_blog qui a eu un impact sur les sites qui ont effectué de nombreux appels switch_to_blog
(nous exécuterions généralement environ 1 000 environ lors du chargement de ce widget de tableau de bord.) Même avec une mémoire limitée à 256 Mo + ; toujours avoir des erreurs d'exécution. Le correctif ajoutait wp_cache_flush();
Crude peut-être, mais nettoie suffisamment la mémoire pour lui permettre de s'exécuter. Des modifications supplémentaires incluent également une certaine logique pour éviter d’afficher les sites avec seulement 1 publication (vraisemblablement la valeur par défaut) et d’afficher le nombre total de sites "actifs" avec 2 publications et plus avec le résumé en bas du tableau.
add_action( 'wp_network_dashboard_setup', 'wpse_66963_network_dashboard_setup' );
function wpse_66963_network_dashboard_setup()
{
wp_add_dashboard_widget(
'wpse_66963_posts_count_widget',
'<div id="icon-edit" class="icon32"></div><h2>Network Posts Count</h2>',
'wpse_66963_posts_count' );
}
function wpse_66963_posts_count()
{
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();
if ( empty( $blogs ) )
{
echo '<p>No blogs!</p>';
break;
}
?>
<table class="widefat">
<thead>
<tr>
<th>Site</th>
<th>Total posts</th>
<th>Draft posts</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Site</th>
<th>Total posts</th>
<th>Draft posts</th>
</tr>
</tfoot>
<tbody>
<?php
$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';
$draft_posts = count( get_posts( $args ) );
$draft_network += $draft_posts;
?>
<tr>
<td><a href="<?php echo site_url(); ?>"><?php echo site_url(); ?></a></td>
<td><?php echo $total_posts; ?></td>
<td><?php echo $draft_posts; ?></td>
</tr>
<?php
}
?>
<tr>
<td><b>Total count (<?php echo $total_sites;?> sites with content)</b></td>
<td><?php echo $total_network; ?></td>
<td><?php echo $draft_network; ?></td>
</tr>
</tbody>
</table>
<?php echo memory_get_usage(); ?>
<br/>
<?php echo memory_get_peak_usage(); ?>
<?php
switch_to_blog( $original_blog_id );
}
Sous la forme d'un widget Tableau de bord réseau:
Ce <h2>
pour le titre du widget est un peu excessif, mais il était juste en train de tester certains styles :)
add_action( 'wp_network_dashboard_setup', 'wpse_66963_network_dashboard_setup' );
function wpse_66963_network_dashboard_setup()
{
wp_add_dashboard_widget(
'wpse_66963_posts_count_widget',
'<div id="icon-edit" class="icon32"></div><h2>Network Posts Count</h2>',
'wpse_66963_posts_count' );
}
function wpse_66963_posts_count()
{
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, 5", ARRAY_A ) );
$original_blog_id = get_current_blog_id();
if ( empty( $blogs ) )
{
echo '<p>No blogs!</p>';
break;
}
?>
<table class="widefat">
<thead>
<tr>
<th>Site</th>
<th>Total posts</th>
<th>Draft posts</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Site</th>
<th>Total posts</th>
<th>Draft posts</th>
</tr>
</tfoot>
<tbody>
<?php
$args = array(
'numberposts' => -1,
'post_type' => 'post',
'post_status' => 'publish' );
$total_network = $draft_network = 0;
foreach ($blogs as $blog)
{
switch_to_blog( $blog->blog_id );
$args['post_status'] = 'publish';
$total_posts = count( get_posts( $args ) );
$total_network += $total_posts;
$args['post_status'] = 'draft';
$draft_posts = count( get_posts( $args ) );
$draft_network += $draft_posts;
?>
<tr>
<td><?php echo $blog->domain; ?></td>
<td><?php echo $total_posts; ?></td>
<td><?php echo $draft_posts; ?></td>
</tr>
<?php
}
?>
<tr>
<td><b>Total count</b></td>
<td><?php echo $total_network; ?></td>
<td><?php echo $draft_network; ?></td>
</tr>
</tbody>
</table>
<?php
switch_to_blog( $original_blog_id );
}