web-dev-qa-db-fra.com

Activer les commentaires pour le post avec la boîte de méta commentaires supprimée

J'ai créé un type de message personnalisé dans un plugin pour un site sur lequel je travaille. J'autorise les utilisateurs auxquels un rôle personnalisé a été attribué à ajouter/modifier/supprimer le type de publication personnalisé. Je voudrais donner à ces utilisateurs le moins de fonctionnalités possible dans l’administrateur, au-delà de la publication.

J'ai donc utilisé remove_meta_box pour supprimer quelques panneaux de l'écran de modification de la conversation pour ces utilisateurs via un plugin. Une des méta-boîtes que j'ai désactivée est commentsstatusdiv, qui inclut les éléments de formulaire pour le statut des commentaires et les rétroliens.

Il semble que si l'élément de formulaire de statut de commentaires est manquant, le champ comment_status est désactivé. Je voudrais activer les commentaires par défaut pour le type de publication et empêcher les utilisateurs occupant ce rôle de modifier le paramètre des commentaires. Mais lorsque les utilisateurs enregistrent, le statut du commentaire est désactivé.

Je peux forcer un paramètre avec le filtre wp_insert_post_data. Mais je ne veux pas remplacer pour les administrateurs. J'aimerais que les administrateurs aient le contrôle.

Comment forcer le statut des commentaires à être activé par défaut et empêcher les utilisateurs d'un rôle spécifique de le modifier tout en permettant aux administrateurs de les activer/désactiver?

1
Dave Konopka

Voici ce que j'ai fini avec. Pour les utilisateurs à accès limité, je règle les commentaires lorsque le guide post est vide. Sinon, je supprime complètement le champ comment_status pour ces utilisateurs. Par défaut, les nouvelles publications deviennent des commentaires activés, ce qui empêche les modifications des utilisateurs à accès limité de les désactiver, tout en permettant aux administrateurs de remplacer le paramètre activé/désactivé.

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