Ограничение доступа к интерфейсу на основе роли пользователя в противном случае перенаправление на форму входа
Я создал пользовательскую роль пользователя в своем functions.php файл. Я создаю новый шаблон страницы для страницы на своем веб-сайте, которую я хотел бы ограничить ролью (а не возможностями). В принципе, я хотел бы сделать так, чтобы, если пользователь с этой новой ролью или любой ролью редактора/администратора зайдет на страницу, он увидит содержимое, в противном случае на ней будет отображаться форма входа в Wordpress по умолчанию. Я также хочу, чтобы он отправил их обратно на эту конкретную страницу после входа в систему. Вот код, который я использую до сих пор, кажется, в основном работает, за исключением того, что перенаправление не работает. Я также попытался использовать wp_login_form()
вместо перенаправления, но это отображает неструктурированную форму, а не то, что я увидел бы, получив доступ wp-login
:
<?php
/*
* Template Name: Restricted content
* Description: Restricted content template
*/
get_header(); ?>
<?php if( current_user_can('custom-role') || current_user_can('administrator') || current_user_can('editor')) { ?>
<div>
Restricted content displayed here
</div>
<?php get_footer(); ?>
<?php
} else {
wp_redirect(wp_login_url());
}
?>
1 answers
WP не может перенаправлять после того, как вы уже вывели HTML-код, поэтому переместите if/else наверх, прежде чем вызывать заголовок, и выводите верхний и нижний колонтитулы только в том случае, если ваше условие выполнено.
Также вместо использования current_user_can('role')
используйте current_user_can('capability')
- т.е.
<?php if(
current_user_can('activate_plugins') ||
current_user_can('edit_a_defined_custom_post_type')
) {
get_header(); ?>
<div>Restricted content here</div><?php
get_footer();
} else {
wp_redirect(wp_login_url());
} ?>
(Согласно Кодексу, "Хотя проверка на соответствие определенным ролям вместо возможности частично поддерживается, эта практика не рекомендуется, поскольку она может привести к ненадежным результатам".)