web-dev-qa-db-fra.com

Fonctions de rôle personnalisées pour l'administrateur ne prenant pas effet (pas de plug-in)

J'ai créé un type de message personnalisé à partir d'un plugin. J'ai ajouté un type de capacité teacher. Ensuite, j'ai ajouté des fonctionnalités personnalisées à l'administrateur. Mais le problème est que pour la première fois, une fois ce code terminé, il ajoute les fonctionnalités mentionnées au rôle. Mais quand je le change plus loin, cela ne prend pas effet. Comme si je supprime maintenant la fonction roles_to_edit_teacher, l'administrateur aura toujours les capacités. Alors, comment résoudre ce problème?

 function plugin_main_functions () {
 register_post_type ('professeurs', tableau (
 'labels' => tableau (
 'nom' => __ (Liste des enseignants ',' Enseignants '), 
' Add_new '=> __ (' ajouter un nouvel enseignant ',' Enseignants '), 
' Add_new_item '=> __ (' Ajouter un nouvel enseignant ',' Enseignants ') 
), 
' public '=> vrai, 
' supports '=> tableau (' titre ',' éditeur ',' vignette '), 
 'menu_icon' => 'dashicons-groupes', 
 'capacite_type' => tableau ('enseignant', 'enseignants'), 
 'map_meta_cap' => vrai 
 
); 
 
} 
 add_action ('init', 'plugin_main_functions'); 
 
 fonction roles_to_edit_teacher () {
 
 $ admin = get_role ('administrateur'); 
 
 
 $ admin-> add_cap ('edit_teacher'); 
 $ admin-> add_cap ('edit_teachers'); 
 $ admin-> add_cap ('read_teacher'); 
 $ admin-> add_cap ('delete_teacher'); 
 $ admin -> add_cap ('delete_teachers'); 
 $ admin-> add_cap ('publish_teacher'); 
 $ admin-> add_cap ('create_teachers'); 
} ._____] add_action ('init', 'roles_to_edit_teacher'); 
 
1
Apple

Les capacités sont stockées dans la base de données, c'est pourquoi elles restent actives même si vous supprimez votre fonction. Les capacités doivent être expressément supprimées:

$admin  = get_role('author');
$admin->remove_cap( 'edit_teacher' );

Et, comme ils sont stockés dans la base de données, vous devez arrêter de les ajouter à chaque chargement de page (comme vous le faites dans l'événement init). En règle générale, vous devez ajouter des fonctionnalités personnalisées sur le hook d'activation de plug-in et les supprimer à la désactivation du plug-in:

add_action('init','plugin_main_functions');
function plugin_main_functions(){
  register_post_type('teachers', array(
    'labels' => array(
        'name'=>__('Teachers List', 'Teachers'),
        'add_new' => __('add new teacher', 'Teachers'),
        'add_new_item' => __('Add new teacher', 'Teachers')
        ),
    'public' => true,
    'supports'=> array('title', 'editor', 'thumbnail'),
    'menu_icon' => 'dashicons-groups',
    'capability_type' => array('teacher','teachers'),
    'map_meta_cap' => true

  ));

}

register_activation_hook( __FILE__, function () {

    // Call function plugin_main_functions(),
    // The function where the custom post type is registered
    plugin_main_functions();

    $admin = get_role('administrator');

    $admin->add_cap('edit_teacher');
    $admin->add_cap('edit_teachers');
    $admin->add_cap('read_teacher');
    $admin->add_cap('delete_teacher');
    $admin->add_cap('delete_teachers');
    $admin->add_cap('publish_teacher');
    $admin->add_cap('create_teachers');

    flush_rewrite_rules();

} );

register_deactivation_hook( __FILE__, function () {

    // Call function plugin_main_functions(),
    // The function where the custom post type is registered
    plugin_main_functions();

    $admin = get_role('administrator');

    $admin->remove_cap('edit_teacher');
    $admin->remove_cap('edit_teachers');
    $admin->remove_cap('read_teacher');
    $admin->remove_cap('delete_teacher');
    $admin->remove_cap('delete_teachers');
    $admin->remove_cap('publish_teacher');
    $admin->remove_cap('create_teachers');

    flush_rewrite_rules();

} );

Ensuite, si vous devez modifier les fonctionnalités d’un événement différent pendant l’activation du plug-in, vous devez effectuer certaines vérifications avant d’ajouter/de supprimer des fonctionnalités afin de ne pas effectuer d’opérations inutiles sur la base de données.

Par exemple:

add_action('init','plugin_main_functions');
function roles_to_edit_teacher(){
    if( $i_neet_to_remove_cap === true ) {
        $admin = get_role('administrator');
        $admin->remove_cap('some_capability');
    }
    if( $i_neet_to_add_cap === true ) {
        $admin = get_role('administrator');
        $admin->add_cap('some_capability');
    }
}
1
cybmeta