Ich bin perplex; Ich kann nicht sehen, wo ich mit diesem Code falsch liege. Es sollte alle Benutzer auf Abonnentenebene zurück auf die Homepage der Website redirect, wenn sie versuchen, auf etwas in / wp-admin zuzugreifen – aber nicht, wenn sie versuchen, in /wp-login.php zu gehen:
// REDIRECT ALL 'SUBSCRIBER' USERS TO SITE HOME PAGE IF THEY TRY TO ACCESS WP-ADMIN add_action( 'init', 'blockusers_init' ); function blockusers_init() { if ( !current_user_can( 'edit' ) && is_admin() ) { wp_redirect( home_url() ); exit; } }
Ich habe versucht, die Rolle anstelle der Fähigkeit ( 'subscriber'
statt 'edit'
) zu verwenden, und das funktionierte, als ich an einer Single-Site-Installation von WordPress war – aber dieses Thema wird jetzt in einer Multi-Site / Unterordner-Installation und für einige verwendet Grund, dass die Rolle nicht funktioniert. Mit dem obigen Code können Abonnenten, die zu / wp-admin oder /wp-login.php gehen, jederzeit zur Startseite weitergeleitet werden.
Irgendwelche Ideen? Danke für Ihre Hilfe!
Also, zuerst, wenn Sie den Zugriff auf wp-admin
blockieren möchten, warum in etwas wp-admin
, das bei jedem Laden der Seite ausgetriggers wird? Haken admin_init
stattdessen admin_init
ein.
Und, wie @MattSmath erwähnt hat, ist Editieren keine Fähigkeit. edit_posts
ist. Außerdem wird admin_init
nur auf den Admin-Seiten admin_init
, sodass Sie is_admin()
von Ihrer Überprüfung entfernen können.
Ihre überarbeitete function:
< ?php add_action('admin_init', 'wpse51831_init'); function wpse51831_init() { if(!current_user_can('edit_posts')) { wp_redirect(home_url()); exit(); } }
Bonus: Wahrscheinlich werden Sie Ihren subscriber
die WordPress-Admin-Leiste zeigen (die sie wieder mit wp-admin
). Dies wird es verbergen:
< ?php add_filter('show_admin_bar', 'wpse51831_hide_admin_bar'); /* * hide the admin bar for `subscribers` * * @uses current_user_can * @return boolean */ function wpse51831_hide_admin_bar($bool) { if(!current_user_can('edit_posts')) { $bool = false; } return $bool; }