web-dev-qa-db-fra.com

afficher le nombre de commentaires ouverts sur le tableau de bord personnalisé

Sur mon tableau de bord personnalisé, je souhaite afficher le nombre total de nouveaux commentaires (comme "maintenant"). Juste comme "Vous avez ... des commentaires ouverts à prendre en charge". Donc, tout ce que je veux, c’est le nombre total et non une liste pour chaque message.

Mais je n'arrive pas à comprendre. Toute aide là-bas?

En attendant, j'ai reçu quelques informations (de wpmudev) à ce sujet, me disant que c’est un truc lourd et pas une question très basique:

Ceci est moins fondamental que vous ne le pensez.

Tu dois:

  • Enregistrer une nouvelle méta-boîte sur le WP admin
  • Interroger la base de données sur le nombre total de nouveaux commentaires depuis la dernière visite de l'utilisateur actuellement connecté.
  • Définissez le délai de visite (changer de page ne les définit donc pas immédiatement sur 0, ce serait frustrant)
  • Écrivez le CSS pour rendre l'affichage joli
  • Vous trouverez des astuces sur ce qu'il faut faire si vous examinez le cœur de WordPress dans le widget "En ce moment", mais ce sera probablement au-dessus de votre tête.

À ce stade, vous pouvez aussi le publier sous forme de plugin. C'est possible et pour ce qui est des plugins, c'est à peine intermédiaire, mais c'est encore très avancé pour ce forum. *

METTRE À JOUR

C'est ce qui m'a finalement rendu heureux, merci encore à @toscho. Il montre le nombre de commentaires en attente de modération. Il peut être placé partout où vous le souhaitez.

<?php
function t5_count_new_comments()
{
global $wpdb;

// last user access
$last_access   = get_user_meta( get_current_user_id(), 'last_access', TRUE );

// comment query
$where = $wpdb->prepare( "WHERE comment_date > %s AND comment_approved='0'",   $last_access );
$comment_query = $wpdb->get_results(
    "SELECT comment_ID,
    COUNT( comment_ID ) AS new_comments
    FROM {$wpdb->comments} $where",
    OBJECT
    );

if ( ! isset ( $comment_query[0]->new_comments ) )
    return 0;

return $comment_query[0]->new_comments;

}

$new_comments = t5_count_new_comments();
echo "There are $new_comments new comments.";
?>
4
Mark

En fait, ce n'est pas si difficile.

  • La dernière heure d'accès pour un utilisateur est dans get_user_meta( get_current_user_id(), 'last_access', TRUE ).
  • La date de chaque commentaire est dans la colonne comment_date.
  • Les deux partagent le même format, nous pouvons donc les comparer en SQL avec un simple >.
  • Il existe une action dans le widget de tableau de bord Right Now pour afficher des lignes supplémentaires: right_now_discussion_table_end. Voir le fichier wp-admin/includes/dashboard.php.

Maintenant, collons-le ensemble:

<?php  # -*- coding: utf-8 -*-
/**
 * Plugin Name: T5 New Comments In Right Now Dashboard
 * Description: Show the number of new comments on the Right Now dashboard
 * Plugin URI:
 * Version:     2013.03.16
 * Author:      Thomas Scholz
 * Author URI:  http://toscho.de
 * Licence:     MIT
 * License URI: http://opensource.org/licenses/MIT
 */

add_action( 'right_now_discussion_table_end', 't5_new_comments_right_now' );

function t5_new_comments_right_now()
{
    global $wpdb;

    // last user access
    $last_access   = get_user_meta( get_current_user_id(), 'last_access', TRUE );

    // comment query
    $where         = $wpdb->prepare( "WHERE comment_date > %s", $last_access );
    $comment_query = $wpdb->get_results(
        "SELECT comment_ID,
            COUNT( comment_ID ) AS new_comments
            FROM {$wpdb->comments} $where",
            OBJECT
    );

    // default values
    $num  = 0;
    $text = _x(
        'New comments',
        'no new comments on dashboard right now',
        'plugin_t5_new_comments'
        );

    // overwrite default values
    if ( isset ( $comment_query[0]->new_comments ) ) {
        $num = $comment_query[0]->new_comments;
        $text = _n( 'New comment', 'New comments', $num, 'plugin_t5_new_comments' );
    }

    // prepare for display
    $num  = number_format_i18n( $num );
    $num  = "<a href='edit-comments.php'><span class='total-count'>$num</span></a>";
    $text = "<a href='edit-comments.php'>$text</a>";

    // display extra column
    printf(
        '<tr>
            <td class="b b-comments">%1$s</td>
            <td class="last t comments">%2$s</td>
        </tr>',
        $num,
        $text
    );
}

Résultat:

screenshot

Télécharger depuis GitHub


En réponse à vos commentaires: Pour obtenir uniquement le nombre de nouveaux commentaires par un entier, utilisez quelque chose comme ceci:

function t5_count_new_comments()
{
    global $wpdb;

    // last user access
    $last_access   = get_user_meta( get_current_user_id(), 'last_access', TRUE );

    // comment query
    $where         = $wpdb->prepare( "WHERE comment_date > %s", $last_access );
    // to get unapproved comments only use this instead:
    // $where         = $wpdb->prepare( "WHERE comment_date > %s AND comment_approved='0'", $last_access );
    $comment_query = $wpdb->get_results(
        "SELECT comment_ID,
        COUNT( comment_ID ) AS new_comments
        FROM {$wpdb->comments} $where",
        OBJECT
        );

    if ( ! isset ( $comment_query[0]->new_comments ) )
        return 0;

    return $comment_query[0]->new_comments;
}

Vous pouvez maintenant utiliser cette fonction dans votre code personnalisé:

$new_comments = t5_count_new_comments();
echo "There are $new_comments new comments.";
7
fuxia