#wordpress #rest #woocommerce
Вопрос:
Я пытаюсь реализовать клиент приложения, который подключается к WordPress и Woocommerce и показывает цены на продукты в зависимости от ролей пользователей.
Это моя настоящая точка зрения:
Я использую плагин под названием Elex (бесплатная версия) для применения правил ценообразования на основе ролей;
Активированные ключи api rest (пользовательское поле в ключах api-администратор);
Создал новую роль пользователя, такую как «my_user_role»;
Создал пользователя «new_user» с ролью «my_user_role»;
Созданы правила скидок для администратора (x%) и роли my_user_role (y%);
От клиента я вызываю https-запросы с параметрами consumer_key и consumer_secret:
mydomain/wp-json/wc/v3/products?consumer_key=XXXXXXXXXX...amp;consumer_secret=YYYYYYY....
В клиентском приложении я могу показывать продукты как гостевой пользователь или как пользователь, вошедший в систему.
Если я позвоню
mydomain/wp-json/wc/v3/products
как гостевой пользователь, он показывает мне обычные цены в качестве ответов, если я войду в систему как new_user, он покажет мне скидку на цены для правил администратора(это потому, что ключ api rest wordpress не предназначен для входа в систему)!
Если я сделаю проверку с панели управления WordPress при добавлении продукта, я могу получить Cookie и не использовать. Итак, если я войду в панель управления wordpress как new_user, я смогу получить файл cookie и номер текущего пользователя, а от почтальона я могу позвонить
mydomain/wp-json/wc/v3/products
добавление
X-WP-Nonce
Cookie
Я получаю цену продукта, указанную для my_user_role.
Я могу создать файл cookie с бэкенда wordpress в личном файле плагина, который содержит:
register_rest_route("myurl", "/generate_cookie", array("methods" => "POST" , "callback" => "generate_cookies")
и в моей функции generate_cookies:
// received username and password parameters
$user = wp_authenticate($username,$password);
$cookie = wp_generate_auth_cookie($user->ID,1209600,"logged_in");
return array("cookie" => $cookie , "cookie_name" => LOGGED_IN_COOKIE, "user" => $this->getUserInfo($user));
Как я могу получить одноразовый номер?
Или каков наилучший способ достижения моей цели?