web-dev-qa-db-ja.com

カスタムダッシュボードで開いているコメントの数を表示する

私のカスタムダッシュボードで、私は新しいコメントの総数を表示したい(どういうわけか "今"のように)。まるで「あなたが…世話をするために開いているコメント」を持っているように。だから私が欲しいのは、各投稿のリストではなく合計数だけです。

しかし、私はこれを正しくすることはできません。何か助けがありますか?

それまでの間、私はこれに関するいくつかの情報(wpmudevから)を得ました。

これはあなたが思うよりも基本的ではありません。

必要がある:

  • 新しいメタボックスをWP adminに登録します
  • 現在ログインしているユーザーが最後にアクセスしてからの新しいコメントの総数についてデータベースを照会します。
  • 訪問タイムアウトを設定します(そのため、ページを変更してもすぐに0に設定されるわけではないため、イライラすることになります)
  • 表示をきれいにするためにCSSを書く
  • あなたは "今すぐ"ウィジェットであなたがWordPressコアを調べるなら何をするべきかについてのヒントを見つけるでしょう、しかしそれはおそらくあなたの頭の上になるでしょう。

その時点で、あなたはそれをプラグインとして公開することもできます。それは可能であり、プラグインに関してはほとんど中間的ではありませんが、それでもこのフォーラムでは非常に高度なものです。

更新

@toschoに感謝します。モデレートを待っているコメントの数を示しています。それはあなたがそれを表示させたい場所に配置することができます。

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

実際、それほど難しいことではありません。

  • ユーザーの最後のアクセス時刻はget_user_meta( get_current_user_id(), 'last_access', TRUE )です。
  • 各コメントの日付はcomment_date列にあります。
  • 両方とも同じフォーマットを共有しているので、SQLでそれらを単純な>と比較することができます。
  • Right Nowダッシュボードウィジェットに追加の行を表示するアクションがあります:right_now_discussion_table_end。ファイルwp-admin/includes/dashboard.phpを参照してください。

それではそれを固執しましょう:

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

結果:

screenshot

GitHubからダウンロードする


あなたのコメントに応えて:新しいコメントの数だけを整数にするには、次のようにします。

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

今すぐあなたのカスタムコードでその関数を使用することができます。

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