mostra o número de comentários abertos no painel customizado

4

No meu painel personalizado, quero mostrar o número total de novos comentários (de alguma forma como "agora"). Assim como "Você tem ... comentários abertos para cuidar". Então tudo que eu quero é o número total e não uma lista para cada post ou algo assim.

Mas eu não consigo entender isso direito. Alguma ajuda aí fora?

Nesse meio tempo eu recebi algumas informações (do wpmudev) sobre isso, me dizendo que isso é algo pesado e não uma questão muito básica:

  

Isso é menos básico do que você imagina.

     

Você precisa:

     
  • Registre uma nova caixa meta para o administrador do WP
  •   
  • Consultar o banco de dados para o total de novos comentários desde a última visita do usuário conectado no momento
  •   
  • Defina o tempo limite da visita (assim, alterar a página não apenas os define como 0, isso seria frustrante)
  •   
  • Escreva o CSS para deixar a exibição bonita
  •   
  • Você encontrará dicas sobre o que fazer se examinar o núcleo do WordPress no widget "Agora mesmo", mas isso provavelmente ficará acima da sua cabeça.
  •   

Nesse ponto, você também pode publicá-lo como um plugin. É possível e, quanto aos plugins, é apenas intermediário, mas ainda é muito avançado para este fórum. *

UPDATE

Isso é o que finalmente me fez feliz, obrigado novamente ao @toscho. Está mostrando o número de comentários, que estão aguardando moderação. Pode ser colocado em qualquer lugar que você queira que apareça.

<?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.";
?>
    
por Mark 16.03.2013 / 09:51

1 resposta

7

Na verdade, não é tão difícil assim.

  • O último horário de acesso para um usuário está em get_user_meta( get_current_user_id(), 'last_access', TRUE ) .
  • A data de cada comentário está na coluna comment_date .
  • Ambos compartilham o mesmo formato, para que possamos compará-los no SQL com um simples > .
  • Há uma ação no widget de painel Right Now para mostrar linhas adicionais: right_now_discussion_table_end . Veja o arquivo wp-admin/includes/dashboard.php .

Agora vamos juntar tudo:

<?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
    );
}

Resultado:

Download do GitHub

Em resposta aos seus comentários: para obter apenas o número de novos comentários, um inteiro, use algo assim:

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;
}

Agora você pode usar essa função em seu código personalizado:

$new_comments = t5_count_new_comments();
echo "There are $new_comments new comments.";
    
por fuxia 16.03.2013 / 11:23