もう少し詳しく説明できないので、コードでお返事させていただきます。
以前のコードは、全て削除して、前回のコードと、同じ手順で貼り付けてみてください。
( コメント一覧を見たら、リセットされます )
<?php
add_action( 'admin_head-edit-comments.php', 'nobita_comment_update' );
add_action( 'admin_bar_menu', 'nobita_add_admin_menu' ,99);
function nobita_pending_comment_coount() {
global $wpdb;
$current_comments_count = count( get_comments( ) );
$old_comments_count = get_option( 'nobita_comment_count' );
$style = 'background-image: url(../wp-includes/images/admin-bar-sprite.png);
background-position: -1px -134px;
background-repeat: no-repeat;display:inline-block;width:16px;height:16px;margin-top:3px';
if ( $current_comments_count > $old_comments_count ) {
$count = $current_comments_count - $old_comments_count;
$num = ' <span style="color:red">New</span> <span style="'. $style. '"></span> <span>'.$count.'</span>';
return $num;
}
return ' <span style="'. $style. '"></span> <span>0</span>';
}
function nobita_comment_count_update(){
$current_comments_count = (int) count( get_comments( ) );
update_option( 'nobita_comment_count', $current_comments_count );
}
function nobita_comment_update( ){
nobita_comment_count_update();
}
function nobita_add_admin_menu( $wp_admin_bar ) {
$wp_admin_bar->add_menu(
array(
'id' => 'pending_comments',
'title' => nobita_pending_comment_coount(),
'href' => admin_url( 'edit-comments.php?comment_status=moderated' ),
'meta' => array( 'class' => 'nobita_comment_count' ),
)
);
}
?>
nobitaさん
コードを記載していただき、本当に感謝いたします。
まさしく、私が考えていたことであり、コードを貼り付けてみたところ、
実現されていまして、非常に嬉しいです。
ありがとうございます。
nobitaさんが記述してくださいましたコードについて、
利用している中で何点か質問したいことがございましたので、
ご回答いただけますと幸いです。
まず、私の前提条件を表示していない時点で失礼だったのですが、
サイトについて私のお友達にも記事を書いてもらっていまして、
以前は私のアカウントでお友達の記事も一緒にのせていたのですが、
最近、お友達に「投稿者権限」で個別にアカウントを渡すことにしました。
それを踏まえて、ということになるのですが、
①投稿者権限のお友達の記事にコメントがついても、数字に変化が見られませんでした。
(ずっと0の状態でした。)
ただ、管理者権限の場合は、普通にカウントされていました。
②また、私rekokerは、管理者権限なのですが、コメントの数字が不安定で、
コメントの管理画面に入ると数字が0になるものの、突然数字が増えている
ということがあり、
対応にとまどっています。
(数字が増える原因としては、明確ではありませんが、私とお友達が一緒にコメントの管理画面に入っていると発生することが分かりました。)
ご回答をしていただいたにも関わらず、さらに質問と要望を重ねる形になってしまい、
申し訳ございません。
上記2点につきまして、お返事いただけますことを期待しております。
よろしくお願い致します。
件数の取得方法と、コメントの0の表示を変更したので、差し替えてください。
コードの内容は、理解できていますか?
<?php
add_action( 'admin_head-edit-comments.php', 'nobita_comment_update' );
add_action( 'admin_bar_menu', 'nobita_add_admin_menu' ,99);
function nobita_pending_comment_coount() {
$current_comments_count = wp_count_comments();
$current_comments_count = $current_comments_count->total_comments;
$old_comments_count = get_option( 'nobita_comment_count' );
$style = 'background-image: url('. home_url(). '/wp-includes/images/admin-bar-sprite.png);
background-position: -1px -134px;
background-repeat: no-repeat;display:inline-block;width:16px;height:16px;margin-top:3px';
if ( $current_comments_count > $old_comments_count ) {
$count = $current_comments_count - $old_comments_count;
$num = ' <span style="color:red">New</span> <span style="'. $style. '"></span> <span>'.$count.'</span>';
return $num;
}
return ' <span style="'. $style. '"></span> <span>'. $current_comments_count. '/'. $old_comments_count. '</span>';
}
function nobita_comment_count_update(){
$current_comments_count = (int) count( get_comments( ) );
update_option( 'nobita_comment_count', $current_comments_count );
}
function nobita_comment_update( ){
nobita_comment_count_update();
}
function nobita_add_admin_menu( $wp_admin_bar ) {
$wp_admin_bar->add_menu(
array(
'id' => 'pending_comments',
'title' => nobita_pending_comment_coount(),
'href' => admin_url( 'edit-comments.php?comment_status=moderated' ),
'meta' => array( 'class' => 'nobita_comment_count' ),
)
);
}
?>
nobitaさん
本当にお手数かけます。
ありがとうございます。
コードについては、なんとなくは理解できているとは思っているのですが、
nobitaさんのレベルまでの理解は全然出来ていないような気がしています。
実際の表示は、〇/〇という表示になり、私個人は好きでした。
また、前項で質問させていただきました投稿者権限で数字が変化しない
という問題は、私の勘違いでした。
本当にごめんなさい。
本当に失礼ではありますが、
もう一点ご質問させてください。
どの権限でも「New」と表示してくださるので嬉しいのですが、
誰のどの記事にコメントがついたのかということが関係なく、
どの記事にコメントがついても、全員にNewがついていました。
この部分を制限すること(自分の記事に対してのみ「new」がつくという仕組み)は
可能でしょうか?
現在、以下のコードを用いて自分の記事についたコメントのみを表示しています。
add_filter('pre_get_comments', 'my_comments_for_current_author');
add_filter( 'user_has_cap', 'my_user_has_cap', 10, 3 );
function my_comments_for_current_author($query) {
global $pagenow;
if( 'edit-comments.php' != $pagenow and !$query->is_admin )
return $query;
if( !current_user_can( 'manage_options' ) ) {
global $user_ID;
$query->query_vars['post_author']= $user_ID ;
}
return $query;
}
function my_user_has_cap( $allcaps, $caps, $args ) {
if ( 'edit_comment'== $args[0] && get_current_user_id()== $args[1] ) {
foreach ( $caps as $cap ) {
$allcaps[$cap]= true;
}
}
return $allcaps;
}
上記のコードで制限している都合上、自分の記事についたコメントだけで
Newを表示できると嬉しいのですが、可能でしょうか?
重ね重ね質問してしまい、本当に申し訳ないです。
一覧の表示とは、無関係なので、提示していただいたコードと関連するような処理は出来ないと思います。
wp_count_comments();
で、処理している部分を、
試してはいませんが、
http://codex.wordpress.org/Class_Reference/WP_Comment_Query
などを使えば、ユーザーごとのコメント数を取得できるんじゃないかと(あてずっぽ)思います。
ログインユーザーを取得して、ユーザーごとのコメント数を取得できれば、可能だと思います。
保存するオプションフィールドは、それぞれのユーザー分必要になりますので、
get_option( 'nobita_comment_count' );
やupdateの部分は、フィールド名を
get_option( 'nobita_comment_count_'.$login_user_id );
という感じで、動的に処理すればいいと思います。
ちゃんとコードが書ける人だったので、安心しました。
がんばってください
nobitaさん
ご返信本当にありがとうございます。
一覧の表示とは、無関係なので、提示していただいたコードと関連するような処理は出来ないと思います。
そうなんですか・・
やはり難しいでしょうか・・
私自身WP Comment Queryの使い方や
$login_user_idの追加などによる動的な処理など、
先ほどのnobitaさんのコードに
どう具体的に組み込んでいくかが結局理解できていなかったみたいです。
もう少しご教授いただけませんでしょうか?
ちなみにですが、
私は初心者で、全然コードを書けない素人でして、
自分で調べてなんとかつなぎ合わせて、のレベルです。
先ほどの自分だけのコメントの表示については、
いろいろ調べてコードを組み合わせての世界なので、
お手柔らかにお願いしたいです。
本当にごめんなさい。
私は初心者で、全然コードを書けない素人でして、
自分で調べてなんとかつなぎ合わせて、のレベルです。
先ほどの自分だけのコメントの表示については、
いろいろ調べてコードを組み合わせての世界なので、
お手柔らかにお願いしたいです。
私も、自分のことを初心者だと思っています。
初心者という言葉を使うなら、努力や向上心とセットにして使ってほしいと思います。
自分なりに試した方法等を抜きにして、何かしらの回答を求める手法は、結構良く使われますが、そのような手法を使った質問をする人に、「何とかしてやろう」と思う人は少なくなっていくかもしれません。
回答が必要であれば、回答したくなるような質問手法を考えてみてはどうでしょうか?
何よりも、私が提示できるコードは、サンプルコードに過ぎません。
コピペで使えるような、実用的なコードを書くには、更にたくさんの労力や、テストを必要とします。
コピペで使おうとしていることが明白なので、これ以上の提示は控えたいと思います。