web-dev-qa-db-fra.com

Limiter le rôle d'auteur à 3 pages wp-admin uniquement

J'autorise le rôle d'utilisateur auteur à ajouter/modifier des messages (à l'aide d'un type de message personnalisé appelé "Messages de l'utilisateur"), ainsi qu'à ajouter/modifier son propre média à partir de wp-admin. Je l'ai actuellement configuré pour que les seuls éléments de menu qu'ils voient soient les "messages de l'utilisateur", "nouveau message de l'utilisateur", "Média" et "Télécharger le média", avec les URL suivantes: post-new.php? Post_type = tsv_userpost edit.php ? post_type = tsv_userpost upload.php media-new.php

Le seul problème est que si l'utilisateur tape dans l'URL, par exemple, post-new.php (sans la partie de type post personnalisée), Wordpress leur permet toujours de voir cette page. Pas de bueno.

Existe-t-il un moyen de rediriger ou d’afficher un message d’erreur aux utilisateurs s’ils ne sont pas administrateurs et s’ils atterrissent sur n’importe quelle page wp-admin SAUF les URL ci-dessus?

J'ai essayé d'utiliser ce code (juste pour la page post-new.php) à partir d'un autre thread, mais il ne semble rien faire:

//Show error message if authors try to access wrong wp-admin pages
add_action('admin_head','my_restrict_access');
function my_restrict_access_meassage(){
    global $pagenow;
    if ($pagenow == 'post-new.php' && !current_user_can( 'switch_themes' )){
        echo '<div class="wrap"><br />
            <div id="message" class="error">You Dont have the right permissions to access this page</div>
        </div>';
        exit();
    }
}

Merci c'est avance.

EDIT: Voici le code que j'ai fini avec qui fonctionne:

        //Restrict access to authors in wp-admin pages
    //Show error message if authors try to access wrong wp-admin pages
    add_action('admin_head','my_restrict_access');
    function my_restrict_access(){
        $Path=$_SERVER['REQUEST_URI'];
        $basepath='http://www.theseattlevine.com/wordpress/wp-admin';
        $URI='http://www.theseattlevine.com'.$Path;

            if      (   ($URI ==($basepath . '/post-new.php')) && !current_user_can ('manage_categories') ) {
                        echo    '<div class="wrap"><br />
                                    <div id="message" class="error">You Dont have the right permissions to access this page. Try these links instead: 
                                        <ul>
                                            <li><a href="/">The Vine Homepage</a></li>
                                            <li><a href="/wordpress/wp-admin/post-new.php?post_type=tsv_userpost">Add a new user post</a></li>
                                            <li><a href="/dashboard">Your dashboard</a></li>
                                        </ul>
                                    </div>
                                </div>';
                        exit();
                        }
            elseif      (   ($URI ==($basepath . '/edit.php')) && !current_user_can ('manage_categories') ) {
                        echo    '<div class="wrap"><br />
                                    <div id="message" class="error">You Dont have the right permissions to access this page. Try these links instead: 
                                        <ul>
                                            <li><a href="/">The Vine Homepage</a></li>
                                            <li><a href="/wordpress/wp-admin/post-new.php?post_type=tsv_userpost">Add a new user post</a></li>
                                            <li><a href="/dashboard">Your dashboard</a></li>
                                        </ul>
                                    </div>
                                </div>';
                        exit();
                        }

    }
2
Eckstein

Assurez-vous que le deuxième paramètre de la fonction "add_action" correspond au nom de votre fonction de restriction d'accès. Ça devrait ressembler a quelque chose comme ca:

add_action('admin_head','my_restrict_access'); 
function my_restrict_access(){ /* code as before */ } 

Heureux d'avoir pu aider. :)

1
guiniveretoo