Ограничение доступа к интерфейсу на основе роли пользователя в противном случае перенаправление на форму входа


Я создал пользовательскую роль пользователя в своем 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());
} 

?>
Author: user13286, 2018-01-11

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());
} ?>

(Согласно Кодексу, "Хотя проверка на соответствие определенным ролям вместо возможности частично поддерживается, эта практика не рекомендуется, поскольку она может привести к ненадежным результатам".)

 2
Author: WebElaine, 2018-01-11 19:05:08