Warum leitet wp-login auf die Startseite um, wenn ich diese function nutze?

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!

Solutions Collecting From Web of "Warum leitet wp-login auf die Startseite um, wenn ich diese function nutze?"

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; }