web-dev-qa-db-fra.com

Comment afficher le nombre de messages sur le réseau?

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.

6
TheLoneCuber

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 );
}
5
Nikky Southerland

Sous la forme d'un widget Tableau de bord réseau:

network dashboard widget

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 );
}
4
brasofilo