web-dev-qa-db-fra.com

Comment permettre à l'éditeur de modifier uniquement la page de confidentialité/les paramètres?

Dans mon installation WordPress (4.9.8.), le rôle d’éditeur n’est pas autorisé à modifier la page de confidentialité.

Cela fonctionnerait avec ce qui suit dans mon 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

Mais maintenant, l'éditeur dispose de beaucoup plus de droits que la simple modification de la page de confidentialité.

Existe-t-il un autre moyen de grant access to the editor user role avec quelques lignes de code PHP?


Pour contourner le problème, je me sers maintenant de ce plugin: https://wordpress.org/plugins/manage-privacy-options/

Un autre type de solution consiste à ne pas choisir de page de confidentialité dans les paramètres de confidentialité.

2
André Kelling

La modification de la page de la politique de confidentialité est limitée à manage_privacy_options, comme indiqué dans un commentaire dans le fichier de base WordPress 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 ) );
}

Pour permettre aux utilisateurs dotés des rôles editor et administrator (dans des instances uniques et multisites également) de modifier et de supprimer la page de politique de confidentialité, il est nécessaire de remplacer le tableau $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