muestra el número de comentarios abiertos en el panel personalizado

4

En mi panel personalizado, quiero mostrar el número total de nuevos comentarios (de alguna manera me gusta "ahora mismo"). Al igual que "Tienes ... comentarios abiertos para cuidar". Así que todo lo que quiero es el número total, no una lista para cada publicación o algo así.

Pero no puedo hacer esto bien. ¿Alguna ayuda por ahí?

Mientras tanto obtuve información (de wpmudev) sobre esto, que me dice que esto es algo pesado y no una pregunta muy básica:

  

Esto es menos básico de lo que piensas.

     

Necesitas:

     
  • Registre un nuevo meta box para el administrador de WP
  •   
  • Consulte en la base de datos el total de nuevos comentarios desde la última visita del usuario que inició sesión actualmente
  •   
  • Establezca el tiempo de espera de la visita (por lo que el cambio de página no solo los establece en 0 de inmediato, sería frustrante)
  •   
  • Escriba el CSS para que la pantalla se vea bonita
  •   
  • Encontrará sugerencias sobre qué hacer si examina el núcleo de WordPress en el widget "Ahora mismo", pero es probable que eso no sea válido.
  •   

En ese momento, también puede publicarlo como un complemento. Es posible y en lo que respecta a los complementos, es apenas intermedio, pero aún está muy avanzado para este foro. *

ACTUALIZACIÓN

Esto es lo que finalmente me hizo feliz, gracias de nuevo a @toscho. Está mostrando el número de comentarios, que están esperando la moderación. Puede colocarse en cualquier lugar donde desee que aparezca.

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

1 respuesta

7

En realidad, no es tan difícil.

  • El último tiempo de acceso para un usuario es en get_user_meta( get_current_user_id(), 'last_access', TRUE ) .
  • La fecha de cada comentario está en la columna comment_date .
  • Ambos comparten el mismo formato, por lo que podemos compararlos en SQL con un simple > .
  • Hay una acción en el widget del panel de control Ahora mismo para mostrar filas adicionales: right_now_discussion_table_end . Vea el archivo wp-admin/includes/dashboard.php .

Ahora vamos a mantenerlo unido:

<?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:

Descargue desde GitHub

En respuesta a sus comentarios: para obtener solo un número entero de nuevos comentarios, use algo como esto:

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

Ahora puedes usar esa función en tu código personalizado:

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

Lea otras preguntas en las etiquetas