web-dev-qa-db-fra.com

Attribuer un rôle personnalisé à une publication personnalisée?

Je cherchais cela, mais je ne pouvais pas trouver un moyen. Le scénario est le suivant: j'ai un type de message personnalisé 'Société' et je crée des messages de type Société à l'aide du code de mon plugin. Lorsque je crée un nouveau poste dans la société, je configure l'auteur en tant qu'administrateur. Plus loin dans le code, je crée un rôle personnalisé "Représentant" et attribue à nouveau les utilisateurs à ce rôle via mon code. Ce que je veux faire est d’affecter un représentant à un poste d’entreprise en tant qu’auteur. Mais je ne peux même pas voir cet utilisateur (Rép.) Dans la liste déroulante pour changer d’auteur. Dois-je passer un argument à wp_insert_user ou register_post_type ou add_role/add_cap pour y parvenir?

Merci d'avance!

5
Rutwick Gangurde

Je republie cela avec un exemple, je n'ai pas vraiment le format de code de cet éditeur, la dernière fois, j'étais tellement irrité que j'ai sauté le code!
Ce menu déroulant est rempli à l'aide d'un filtre 'wp_dropdown_users' (user.php, ligne 976). Ce filtre renvoie la liste déroulante (sélection HTML) sous forme de chaîne. Vous pouvez intercepter cette chaîne et ajouter vos propres options, à savoir la liste des utilisateurs dotés du rôle personnalisé. Inspectez la sélection avec Firebug, la valeur de l’option correspond à l’identifiant de l’utilisateur et text est le nom de connexion de cet utilisateur.

<?php 
    add_filter('wp_dropdown_users', 'test');
    function test($output) 
    {
        global $post;

        //Doing it only for the custom post type
        if($post->post_type == 'my_custom_post')
        {
            $users = get_users(array('role'=>'my_custom_role'));
           //We're forming a new select with our values, you can add an option 
           //with value 1, and text as 'admin' if you want the admin to be listed as well, 
           //optionally you can use a simple string replace trick to insert your options, 
           //if you don't want to override the defaults
           $output .= "<select id='post_author_override' name='post_author_override' class=''>";
        foreach($users as $user)
        {
            $output .= "<option value='".$user->id."'>".$user->user_login."</option>";
        }
        $output .= "</select>";
     }
     return $output;
    }
?>

C'est tout! Vous aurez la liste déroulante répertoriant vos rôles personnalisés. Essayez de changer l'auteur du post, il est mis à jour proprement. C'est un hack, mais ça a fonctionné pour moi!

4
Rutwick Gangurde

Mise à jour de la fonction précédemment publiée qui duplique la zone de sélection et n’affiche pas le nom de l’auteur. Ajout du support pour les rôles multiples:

add_filter('wp_dropdown_users', 'addAuthorsToSelect');
function addAuthorsToSelect($output)
    {
        global $post;
        if($post->post_type == 'my_custom_post_type')
        {
            $users = get_users(array('role__in'=>array('role1','role2','role3','role4')));
            $output = "<select id='post_author_override' name='post_author_override' class=''>";
            foreach($users as $user)
            {
                $output .= "<option value='".$user->id."' ".(($post->post_author==$user->id)?'selected="selected"':'').">".$user->display_name." (".$user->user_login.")</option>";
            }
            $output .= "</select>";
        }
        return $output;
    }
2
Luc