• 解決済 haruka

    (@harlequin_wp)


    権限グループ「投稿者」は、本人の投稿についたコメントを編集(モデレート、編集、削除等)することができます。
    これをできないように権限を外すことはできますか?

    管理画面の投稿一覧で、投稿者が本人の投稿のコメント編集リンク(吹き出しにコメント数が表示されているもののことです)にアクセスすると、その投稿についたコメント一覧が表示されます。
    ここには、各コメントを編集するためのリンクに加え、コメントした人のメールアドレスまで表示されています。
    投稿者同士が友人とは限らないので、これはどうしても避けたいです。
    コメントの編集も、本人が書いたものではないコメントを削除したり書き換えたりはできないようにしたいです。

    CODEXで権限の一覧を見てみると、コメントに関係してそうなものは「moderate_comments」と「edit_comment」しか見当たらず、moderate_commentsの方は元々投稿者には許可されていない権限になっていたので、権限テーブルに記述が無かったedit_commentを投稿者グループから外してみたのですが、状況は変わらず、コメントの編集が出来てしまいます。

    functionsphp

    function remove_author_edit_comments(){
      global $wp_roles;
      $wp_roles->remove_cap( 'author', 'edit_comment' );
    }
    add_action( 'admin_init', 'remove_author_edit_comments' );

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 以下をテーマフォルダの functions.php に貼付ければ OK なはず◎

    <?php
    add_action( 'pre_get_comments', 'my_pre_get_comments' );
    function my_pre_get_comments( $query ) {
      if ( is_admin() && ! current_user_can( 'administrator' ) && 'edit-comments.php' == $GLOBALS['pagenow'] ) {
        $query->query_vars['user_id'] = get_current_user_id();
      }
    }
    
    add_filter( 'user_has_cap', 'my_user_has_cap', 10, 3 );
    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;
    }
    ?>

    トピック投稿者 haruka

    (@harlequin_wp)

    kzさん、ありがとうございます!
    そのままコピペで希望通りにできました!

    ざっと該当のフックのかかった関数の中身を覗いてみたのですが、今の私の知識では難易度が高く、具体的にどういう処理が行われて、それをフックによってどうフィルターしているのかまでは理解できていないので、今後勉強していきたいと思います。

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

    トピック投稿者 haruka

    (@harlequin_wp)

    すみません。解決したと思ったのですが、確認が漏れていた部分がありました。

    私の質問の書き方が悪かったのですが、

    コメントの編集も、本人が書いたものではないコメントを削除したり書き換えたりはできないようにしたいです。

    これ、「投稿であれコメントであれ他人が書いたものを弄らせたくない」という意味でこう書いてしまいましたが、本人が他人の投稿に付けたコメントを編集できないという投稿者の制限はそのままにしたいです。
    たぶん、本人以外のコメントを編集できなくしたい=本人のコメントは編集できるようにしたい、と伝わってしまいましたよね…申し訳ありません。

    投稿者には、本人のもの他人のもの問わず全てのコメントを編集できないようにしたい、というのが希望です。(管理画面での閲覧自体ができなくなっても良いです)

    これだと、投稿者が他人の投稿に付けた自分のコメントを編集できないというのはデフォルトの制限なので、もっとシンプルな処理になるのかもしれない、と思ったのですが、そこは特に関係ないでしょうか?

    下から 6 行目の
    $allcaps[$cap] = true;

    unset( $allcaps[$cap] );
    に変更すれば、編集等できなくなります◎

    トピック投稿者 haruka

    (@harlequin_wp)

    ksさん、再びの回答ありがとうございました!
    無事できました〜!

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「投稿者本人の投稿に付いたコメントの編集権限を外したい」には新たに返信することはできません。