web-dev-qa-db-ja.com

編集者にプライバシーページ/設定のみの編集を許可するにはどうすればよいですか?

私のWordPressインストール(4.9.8.)では、編集者ロールはプライバシーページを編集することを許可されていません。

それは私のfunctions.phpの中で次のように動作します:

$role_object = get_role( 'editor' );
$role_object->add_cap( 'manage_privacy_options', true );
$role_object->add_cap( 'manage_options' ); // this needs to be active in order that before cap works

しかし今では、編集者には単にプライバシーページを編集するよりもはるかに多くの権利があります。

何行かのPHPコードを使用してgrant access to the editor user roleを作成する別の方法はありますか?


回避策として、私は今このプラグインを使用しています: https://wordpress.org/plugins/manage-privacy-options/

別の種類の回避策は、プライバシー設定でプライバシーページを選択しないことです。

2
André Kelling

プライバシーポリシーページの編集は、WordPressコアファイルmanage_privacy_optionsのコメントで指摘されているようにwp-includes/capabilities.phpに制限されています。

/*
 * Setting the privacy policy page requires `manage_privacy_options`,
 * so editing it should require that too.
 */
if ( (int) get_option( 'wp_page_for_privacy_policy' ) === $post->ID ) {
  $caps = array_merge( $caps, map_meta_cap( 'manage_privacy_options', $user_id ) );
}

ロールeditorおよびadministrator(単一サイトおよび複数サイトのインスタンス)を持つユーザーがプライバシーポリシーページを編集および削除できるようにするには、$caps配列を上書きする必要があります。

add_action('map_meta_cap', 'custom_manage_privacy_options', 1, 4);
function custom_manage_privacy_options($caps, $cap, $user_id, $args)
{
  if ('manage_privacy_options' === $cap) {
    $manage_name = is_multisite() ? 'manage_network' : 'manage_options';
    $caps = array_diff($caps, [ $manage_name ]);
  }
  return $caps;
}
1
Sven