Временное разрешение определенной роли пользователей для просмотра ограниченного контента

В WordPress/WooCommerce у меня есть интернет-магазин, который использует роли пользователей, и на основе этих ролей вы можете видеть разные страницы/продукты.

Что я хочу сделать, так это добавить способ, который позволяет временному просмотру некоторой роли пользователя, то же самое, что и другая роль пользователя.

Допустим, у меня есть 4 разные роли пользователя:

  1. Администратор
  2. Премиум член
  3. Стандартный член
  4. Участник по умолчанию

Могу ли я сделать (скажем, кнопку), которая при нажатии будет отображать контент с ограниченным доступом для «Члена по умолчанию», чтобы просматривать его, как если бы он был «Премиум-членом»?

Предпочтительно, чтобы я НЕ навсегда изменил роль пользователя, а затем изменил ее обратно. Возможно ли это каким-то образом?

Спасибо


person Mac    schedule 24.01.2017    source источник


Ответы (1)


Да, это возможно, если вы добавите условие OR в свой шаблон страницы для ваших существующих ролей пользователей, условия просмотра (или отображения). Это условие будет основано на пользовательском поле, заданном в метаданных пользователя.

Поэтому, когда вы нажмете на эту кнопку, она обновит значение настраиваемого поля пользователя и позволит отображать премиум-контент (например). Для этого вы можете использовать get_user_meta() и update_user_meta() Функции Wordpress.

Сначала вы определяете эти 2 переменные в начале вашего php-файла или шаблона:

// Getting the user iD
$user_id = get_current_user_id();
// Looking if our user custom field exist and has a value
$custom_value = get_user_meta($user_id, '_custom_user_meta', true);

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

if($user_role == 'premium' && $custom_value){
    // Displays the premium content
}

Теперь при нажатии на вашу кнопку значение $custom_value будет обновлено до true, что позволит этому пользователю видеть премиум-контент при отправке формы (или с помощью ajax).

Таким образом, вам нужно будет поместить этот код сразу после двух переменных выше:

if('yes' == $_post['button_id']){
    // $custom_value and $user_id are already defined normally (see above)
    if($custom_value){
        update_user_meta($user_id, '_custom_user_meta', 0); // updated to false
    } else {
        update_user_meta($user_id, '_custom_user_meta', 1); // updated to true
    }
}

Это должно работать…


Обновление (на основе вашего комментария)

В качестве альтернативы, для администратора, как в вашем комментарии, вы можете указать роль пользователя 'administrator' в своем условии И (&&) специальный файл cookie, который будет устанавливается вашей кнопкой. Таким образом, вам не придется использовать настраиваемое поле.

person LoicTheAztec    schedule 24.01.2017
comment
Моя первоначальная мысль/попытка была чем-то вроде того, что вы описали выше, но я вижу несколько проблем с этим. (1): Допустим, это только администратор, я хочу видеть, как он выглядит для других ролей, я не хочу постоянно менять его роль :(. (2): Мне нужно несколько раз нажать кнопку, чтобы переключиться обратно и т. д. (3): Я вынужден использовать пользовательскую переменную — не то, чтобы с этим что-то не так, но, очевидно, я бы предпочел этого не делать :) - person Mac; 24.01.2017