WordPress: перенаправить домашнюю страницу и страницы на страницу учетной записи, когда пользователь не находится в определенной роли c. - PullRequest
0 голосов
/ 29 мая 2020

Я хочу перенаправить каждую страницу (включая домашнюю) в WordPress на определенную страницу c. Но я также хочу установить некоторые исключения. Страницы, которые я не хочу перенаправлять. Перенаправление должно происходить только в том случае, если текущий пользователь не является частью роли пользователя «редактор».

Например:

Я хочу перенаправить каждого пользователя без этой роли на страницу с страница ID 9 . Но страницы с ID 1,2,3 и 4 не должны перенаправляться.

Мне удалось перенаправить домашнюю страницу на страницу с идентификатором 9. Но только домашняя страница .

Но как я могу добавить любую другую страницу к этой функции, а также добавить исключения? Думаю, мне нужно внести в белый список исключения каким-то образом, но я просто не понимаю этого в данный момент.

EDIT: Вот еще кое-что: у меня есть роль пользователя (в этот пример «редактор») с собственным личным кабинетом. Теперь я хочу ограничить доступ ко всему сайту для каждого пользователя и роли. Но если пользователь вошел в систему с ролью «редактор», я хочу разрешить им перемещаться в зоне для членов. Но если пользователь не вошел в систему, мне нужно, чтобы страница входа и страница регистрации были открыты для всех. Все остальное следует перенаправить на страницу входа (ID 9).

Это текущий код:

function redirect_homepage() {
    if( ! is_home() && ! is_front_page() )
        return;

    wp_redirect( get_permalink('9') );
    exit;
}

add_action( 'template_redirect', 'redirect_homepage' );

1 Ответ

1 голос
/ 29 мая 2020

Как я понял вашу проблему с вашим редактированием:

  1. Вы хотите, чтобы вся ваша страница была доступна только зарегистрированным пользователям.
  2. Но должен быть видимый регистр и страницы входа, чтобы пользователи могли зарегистрироваться и войти в систему.
  3. Эти страницы являются настраиваемыми страницами (не wp-admin), и у вас есть идентификаторы страниц.
  4. Только авторизованный пользователь с ролью «редактор» может использовать всю страницу. Если вы вошли в систему, но не выполняете роль «редактора», ваш доступ к странице такой же, как и для незарегистрированных пользователей (нет доступа / поэтому перенаправление на страницу входа или другое).

Таким образом, вы можете поместить код functions. php файл вашей темы:

<?php

function editors_only() {

    /* Redirect not logged in users */

    // instead of '12' and '13' you write the page ids of your login and register pages
    if ( !is_user_logged_in() && !is_page( 12 ) && !is_page( 13 ) ) {
        wp_redirect( get_permalink(12) ); // redirect to login page
        exit;
    }

    /* Redirect logged in users */

    if ( is_user_logged_in() ) {

        $user = wp_get_current_user(); // get current user
        $user_access = false; // set boolean for access to false
        if ( in_array( 'editor', (array) $user->roles ) ) {
            $user_access = true; // if user role correct set boolean to true
        }

        if ( $user_access == false ) { // is user has not the editor role
            wp_redirect( get_permalink(12) ); // redirect to login page
            exit;
        }
    }
}
add_action( 'wp', 'editors_only' ); 

?>

Я думаю, что это не лучшая практика и не предназначена для перенаправления ваших авторизованных пользователей на вашу страницу входа, так как они уже вошли в систему, но просто не имеют роли «редактора». Возможно, у вас есть страница upgrade account или другие страницы для этой роли пользователей. Вы можете добавить этот идентификатор страницы в свой код «перенаправить пользователей, не вошедших в систему» ​​(другой && !is_page(id)) и поместить идентификатор этой страницы в функцию get_permalink(id), если доступ пользователя является ложным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...