Я перенаправляю пользователя в другое место на основе данных из таблицы options , используя wp_logout
hook.
Таким образом, функция обратного вызова хука wp_logout
ниже: (примечание: я закомментировал некоторый код, потому что я его тестирую)
public function logout_redirect_to() {
$options = $this->load_all_options();
echo '<pre>';
print_r($options);
echo '<hr/>';
$user = wp_get_current_user();
print_r($user);
echo '<hr/>';
foreach ($options as $role_name => $redirect_to) {
$role_name = strtolower($role_name);
print_r($role_name);
echo '<hr/>';
print_r($user->roles);
echo '<hr/>';
if (in_array($role_name, $user->roles ) ) {
print_r($redirect_to);
echo '<hr/>';
//wp_redirect(site_url("/".$redirect_to[0]));
//exit();
} else {
//wp_redirect(site_url('/'));
//exit();
}
}
wp_die();
}
Выше условиявсегда переходить в другой блок, это означает, что он идет на домашнюю страницу сайта. Но вы можете видеть, что у меня есть некоторые условия для перенаправления на другую страницу.
Каково условие?
Здесь вы можете видеть, что я получаю данные из таблицы options
, используя переменную $options
, и ее вывод ниже:
Array
(
[Administrator] => Array
(
[0] => about-us
)
[Editor] => Array
(
[0] => account
)
[Author] => Array
(
[0] => blog
)
[Subscriber] => Array
(
[0] => support
)
[Shop_Accountant] => Array
(
[0] => support
)
[Shop_Vendor] => Array
(
[0] => purchase-confirmation
)
)
и я также проверяю, что у пользователя есть та роль, которая существует в переменной $options
. Таким образом, вывод переменной $user
ниже:
WP_User Object
(
[data] => stdClass Object
(
[ID] => 3
[user_login] => umme
[user_pass] => $P$BE0lB.YAcEqeIBJVm3QhdieaJtRrFE.
[user_nicename] => umme
[user_email] => umme@gmail.com
[user_url] =>
[user_registered] => 2019-10-22 18:15:52
[user_activation_key] =>
[user_status] => 0
[display_name] => Umme Habiba
)
[ID] => 3
[caps] => Array
(
[shop_accountant] => 1
)
[cap_key] => thcapabilities
[roles] => Array
(
[0] => shop_accountant
)
[allcaps] => Array
(
[read] => 1
[edit_posts] =>
[delete_posts] =>
[edit_products] => 1
[read_private_products] => 1
[view_shop_reports] => 1
[export_shop_reports] => 1
[edit_shop_payments] => 1
[shop_accountant] => 1
)
[filter] =>
[site_id:WP_User:private] => 1
)
Now , в цикле foreach
я проверяю, что значение $role_name
существует в массиве $user->roles
. Для этого я использую in_array()
, а также я проверяю, что является выводом этой переменной.
Обе переменные вывод:
administrator
Array
(
[0] => shop_accountant
)
editor
Array
(
[0] => shop_accountant
)
author
Array
(
[0] => shop_accountant
)
subscriber
Array
(
[0] => shop_accountant
)
shop_accountant
Array
(
[0] => shop_accountant
)
Array
(
[0] => support
)
shop_vendor
Array
(
[0] => shop_accountant
)
и $redirect_to
показывает мне:
Array
(
[0] => about-us
)
Array
(
[0] => account
)
Array
(
[0] => blog
)
Array
(
[0] => support
)
Array
(
[0] => support
)
Array
(
[0] => support
)
Array
(
[0] => purchase-confirmation
)
Теперь главный вопрос:
В приведенном выше выводе вы можете видеть, что переменная $role_name
показывает мне
shop_accountant
, а $user->roles
показывает мне
Array
(
[0] => shop_accountant
)
Тогда , почему in_array()
всегда собирается блокировать что-то еще?