Actuellement, les utilisateurs avec un certain rôle seraient redirigés avec un crochet dans admin_init
en fonction de la condition suivante
if (is_admin() && in_array($role_id, $user->roles))
Cependant, cela empêche l'utilisateur connecté avec ce rôle d'utiliser le hook d'action admin_post
. Existe-t-il un moyen de rediriger uniquement les fonctions ou l’accès au tableau de bord de l’administrateur?
J'ai cherché la meilleure option pour gérer la soumission de formulaire WordPress et lu que admin_post
est le crochet à utiliser, mais maintenant, il semble que je ne peux pas l'utiliser maintenant si le rôle est redirigé lors de l'accès à wp_admin/admin-post.php
?
Qu'en est-il de (1) current_screen
? crochet d'action, ou une condition pour (2) get_current_screen()
dans votre conditionnel et appelez ensuite wp_redirect
?
Les deux vous donnent un WP_Screen object
qui a plusieurs paramètres, y compris une propriété $parent_base
cela peut donner une inclusion plus large si nécessaire, aussi.
Voici la liste des propriétés du codex:
$ action Toute action associée à l'écran. 'add' pour les écrans * -add.php et * -new.php. Vide autrement.
$ base Le type de base de l'écran. C'est typiquement la même chose que $ id mais avec tous les types de post et les taxonomies supprimés. Par exemple, pour un $ id de 'edit-post', la base est 'edit'.
$ id L'identifiant unique de l'écran.
$ is_network Indique si l'écran est dans l'administrateur du réseau.
$ is_user Si l'écran est dans l'utilisateur admin.
$ parent_base Le parent du menu de base. Ceci est dérivé de $ parent_file en supprimant la chaîne de requête et toute extension .php. Les valeurs $ parent_file de 'edit.php? post_type = page' et 'edit.php? post_type = post' ont une $ parent_base de 'edit'.
$ parent_file Le $ parent_file de l'écran selon le système de menus admin. Certaines valeurs de $ parent_file sont 'edit.php? Post_type = page', 'edit.php' et 'options-general.php'.
$ post_type Le type de publication associé à l'écran, le cas échéant. L'écran 'edit.php? Post_type = page' a un type de message de 'page'. L'écran 'edit-tags.php? Taxonomy = $ taxonomy & post_type = page' a un type de message de type 'page'.
$ taxonomy La taxonomie associée à l'écran, le cas échéant. L'écran 'edit-tags.php? Taxonomy = category' a une taxonomie de 'category'.
Juste un exemple rapide d'utilisation possible, le code ne fonctionne pas tel quel:
add_action( 'current_screen', 'my_function' );
function my_function( $current_screen ) {
//true for anything other than page prefixed with edit.php
if ( $current_screen->parent_base !== 'edit' ) {
//get user role here, then:
if ( in_array( $user->roles ) ) {
//send to /wp-admin/
//note: for multisite I don't think admin_url() is the function you need
wp_redirect( admin_url() );
}
}
}
Il peut y avoir une meilleure approche pour votre cas spécifique, mais en général, j’ai utilisé quelque chose de similaire comme un accès ouvert/fermé à un écran de type utilisateur ou post_type sans affecter la capacité des utilisateurs à se connecter.