web-dev-qa-db-ja.com

コメントメタボックスを削除して投稿のコメントを有効にする

私が取り組んでいるサイトのプラグインでカスタム投稿タイプを作成しました。カスタムロールを割り当てられたユーザーに、カスタム投稿タイプの追加/編集/削除を許可します。これらのユーザーには、投稿以外に管理者にできるだけ少ない機能を提供したいと思います。

だから私はプラグインを介してこれらのユーザーの会話投稿編集画面上のいくつかのパネルを削除するためにremove_meta_boxを使いました。私が無効にしたメタボックスの1つはcommentsstatusdivで、これにはコメントのステータスとトラックバックのためのフォーム要素が含まれています。

Comments statusフォーム要素がない場合は、comment_statusフィールドはoffに設定されているようです。投稿タイプのコメントをデフォルトで設定し、このロールのユーザーがコメント設定を変更できないようにします。しかし、ユーザーがコメント投稿ステータスを保存すると、offに設定されます。

wp_insert_post_dataフィルターで設定を強制することができます。しかし、私は管理者を上書きしたくありません。管理者に制御権を与えてもらいたいのですが。

コメントのステータスをデフォルトで強制的にオンにして、管理者がオン/オフを切り替えられるようにしながら、特定のロールのユーザーがそれを変更できないようにする方法

1
Dave Konopka

これが私が最後になったものです。アクセスが制限されているユーザーのために、投稿ガイドが空の場合にコメントを設定します。そうでなければ、私はそれらのユーザのためのcomment_statusフィールドを完全に削除します。デフォルトでは、コメントへの新しい投稿が有効になっており、管理者が設定のon/offを上書きできるようにしながら、制限付きアクセスのユーザー編集がそれらをオフにすることを防ぎます。

add_filter( 'wp_insert_post_data', 'handle_comments_setting' );
function handle_comments_setting( $data ) {
  if ( current_user_can( 'limited_role_name' )) {
    if ( $data['guid'] == '') {
      //Default new posts to allow comments
      $data['comment_status'] = "open";        
    } else {
      //Otherwise ignore comment setting for community_member role users
      unset($data['comment_status']);
    }
  }
  return $data;
}
2
Dave Konopka