• 解決済 J.Kiyama

    (@jkiyama)


    twentytwelveのfunctionには、以下のコードがあります。

    printf( '<cite><b class="fn">%1$s</b> %2$s</cite>',
    	get_comment_author_link(),
    	// If current post author is also comment author, make it known visually.
    	( $comment->user_id === $post->post_author ) ? '<span>' . __( 'Post author', 'twentytwelve' ) . '</span>' : ''
    );

    これは、コメントが投稿者によるものである場合、<span>Post author</span>というマークを表示するというものだと思います。

    サイトを複数ユーザによって運営している場合、投稿者ではない別の管理者がコメントへ返信を行うことがあると思いますが、このコードでは、実際に記事を書いたユーザが返信したときにしかマークが表示されません。

    そこで、記事投稿者以外のサイトユーザがコメントに返信した場合でも「管理者」というマークが表示されるよう、以下のコードを考えましたが、phpへの理解が足りず、思うような結果になりません。このコードの問題点がわかる方はおりませんでしょうか。

    $blog_users = get_users(); //ブログ内の全ユーザの全ユーザ情報を取得
    $blog_user_IDs = $blog_users->ID; //ユーザ情報のうち、ID番号のみを取得して変数に代入
    $comment_user_ID = $comment->user_id;//コメント投稿者のIDを取得して変数に代入
    if ( in_array ($comment_user_ID, $blog_user_IDs) ) {//コメント主のID番号が「$blog_user_IDs」の配列の中にあるかチェック。
        echo '<span>管理者</span>';//trueの場合、「管理者」マークを表示する。

    }

    よろしくお願いいたします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • 基本的に、$comment->user_id には、ログインしていないユーザーの場合は0が、0 以外であれば、ログインしているユーザーのIDが入りますので、もっと簡単に判別できると思います。

    トピック投稿者 J.Kiyama

    (@jkiyama)

    jim912 さん
    返信ありがとうございます。

    基本的に、$comment->user_id には、ログインしていないユーザーの場合は0が、0 以外であれば、ログインしているユーザーのIDが入ります

    「ログインしているユーザー」の中に、「サイト運営側のユーザ」のみならず、「閲覧者側のユーザ」が含まれることが、可能性としてはあるのかと考え、将来的に「閲覧者側のユーザ」が存在する状況があるとすれば、get_users()で管理権限等で条件設定することもできるかと思い、質問のような内容としました。

    現時点では、ご提示いただいたように、’0’の場合と、それ以外の場合で問題なく機能いたしました。

    printf( '<cite><b class="fn">%1$s</b> %2$s</cite>',
    	get_comment_author_link(),
    	// If current post author is also comment author, make it known visually.
    	( $comment->user_id != 0 ) ? '<span>' . __( 'Post author', 'twentytwelve' ) . '</span>' : ''
    );

    ありがとうございました。

    ちなみに、質問したコードが動かないのは、get_users()のデータからうまく’ID’部分を取り出せていないのか、配列を変数にうまく格納できていないためではないかと思うのですが、

    $blog_users = get_users(); //ブログ内全ユーザの全ユーザ情報を取得
    $blog_user_IDs = $blog_users->ID; //ユーザ情報のうち、ID番号のみを取得して変数に代入

    get_users()で得た連想配列から、ユーザIDを配列として取り出し、変数に格納するにはどのようなコードにすればよかったか、再度アドバイスいただけないでしょうか。

    $blog_users = get_users();
    $blog_user_IDs = array();
    foreach ( $blog_users as $blog_user ) {
    	$blog_user_IDs[] = $blog_user->ID;
    }

    ですね。

    トピック投稿者 J.Kiyama

    (@jkiyama)

    jim912さん

    教えていただいたforeachによる配列へのデータ格納方法で
    想定していた動作をさせることが出来ました。

    WordPressでもよく出てくる、foreach・while等の意味や使い方を
    ぼんやりとしかわかっておりませんでしたが、
    このコードでより明確に理解できたように思います。

    普段codexのサンプルコードばかりを頼りにしていて
    phpの習得が止まってしまっていました。

    貴重なアドバイスありがとうございました。
    大変勉強になりました。

    改修後のコード

    $blog_users = get_users(); //全ユーザ情報を取得して(必要であればget_user()にパラメータ)$blog_usersに格納。
    
    $blog_user_IDs = array(); //$blog_user_IDsを配列として定義。
    foreach ( $blog_users as $blog_user ) {
    	$blog_user_IDs[] = $blog_user->ID;
    } // foreachで$blog_user_IDsに$blog_users->IDを格納。
    
    $comment_user_ID = $comment->user_id; // コメント投稿者のIDを"$comment_user_ID"に格納。
    
    printf( '<cite class="fn">%1$s %2$s</cite>',
    	get_comment_author_link(),
    	( in_array ($comment_user_id, $blog_user_IDs) ) ? '<span>サイト管理者</span>' : ''
    ); // 配列"$blog_user_IDs"の中に"$comment_user_id"があれば<span>サイト管理者</span>を表示

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「サイトユーザによるコメントにはマークをつける」には新たに返信することはできません。