WooCommerce — Перенаправлять зарегистрированных пользователей в зависимости от их роли

#php #wordpress #woocommerce #woocommerce-subscriptions

#php #wordpress #woocommerce #woocommerce-подписки

Вопрос:

Это запрос, основанный на членстве в WooCommerce и подписках.

Я должен добавить, что я также пытаюсь решить, подходит ли UX для того, что я делаю.

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

Опять же, существуют различные роли и плагины перенаправления, но, похоже, ни один из них не помогает в этом конкретном сценарии. Итак, исходный код, который я использовал, находится здесь: SOURCE, и я собираюсь сделать что-то вроде этого:

 function eks_redirect_users_by_role() {

    global $post;
    $current_user   = wp_get_current_user();
    $role_name      = $current_user->roles[0];


    if ( 'subscriber' === $role_name amp;amp; $post->ID == 47145)  {
        wp_redirect( '/my-account' );
    } 

} 

add_action( 'admin_init', 'eks_redirect_users_by_role' );
  

Итак, если пользователь играет роль подписчика, и они пытаются посетить страницу idea, она перенаправляется.

В настоящее время он возвращается на страницу продукта, на которой написано «у вас уже есть членство», но для этого требуется несколько шагов.

Комментарии:

1. Ваш код перенаправляет на страницу моей учетной записи или нет? Пожалуйста, объясните, чего именно вы хотите достичь

2. Допустим, вы уже являетесь участником сайта. Очевидно, что на этом сайте вы все еще можете нажимать на ссылки, которые перенаправляют вас в места на сайте, где вы можете купить подписку. Я хочу, чтобы любой, у кого уже есть членская подписка, был перенаправлен на страницу своей учетной записи. Единственный способ, которым я мог придумать, как это сделать, — это перенаправить страницу, когда кто-то, у кого есть роль подписчика. Итак, мне нужно что-то, что учитывает идентификатор страницы и роль пользователя. Я надеюсь, что это имеет смысл.

3. Вы запрещаете пользователю-подписчику не открывать страницу с определенным идентификатором. У вас это сработало? и с какой проблемой вы столкнулись?

4. Пожалуйста, обратитесь к моему оригинальному сообщению и предыдущему ответу на ваш запрос.

5. Я не смог получить это после прочтения обоих, поэтому я пытаюсь узнать от вас в комментарии.

Ответ №1:

Это может быть более полезным и правильным способом выполнения вашего запроса.

 function redirection_based_user_role(){

    $current_user   = wp_get_current_user();
    $role_name      = $current_user->roles[0];
    $postid         = get_the_ID();

    if ( 'subscriber' === $role_name amp;amp; $postid == 47145  ) {
        wp_redirect( home_url( '/my-account' ), 301 );
        exit;
    }
}
add_action( 'template_redirect', 'redirection_based_user_role' );
  

Надеюсь, это сработает.

Ответ №2:

Я смог добиться того, чего хотел, следующим образом:

 function eks_redirect_user() {

    $current_user   = wp_get_current_user();
    $role_name      = $current_user->roles[0];
    $postid = get_the_ID();

    if ( 'subscriber' === $role_name amp;amp; $postid == 47145  ) { ?>
        <script>
function redirectPage() {

    window.location = "/my-account/";
}

redirectPage();
</script>

<?php
        exit;
    }

}
add_action('wp_footer', 'eks_redirect_user' );
  

Проблема в том, что это довольно неопрятное решение, поскольку перенаправление кажется странным. Я не уверен, что использование wp_redirect будет работать лучше. Я решил просто отключить кнопку на странице с основной информацией о членстве, а не перенаправлять каждый призыв к действию на страницу учетной записи, что кажется более элегантным решением.