Ваш if statement
никогда не вернет true, потому что вы проверяете идентификатор продукта, если они равны '3422, 3423, 3424'
, который ваш продукт никогда не будет равен этому, что вам нужно сделать, это сохранить эти идентификаторы в массиве и проверить, если идентификатор продукта в массиве и, если да, выполнить свой код.
попробуйте следующее:
add_action('woocommerce_order_status_processing', 'change_role_on_purchase');
function change_role_on_purchase($order_id)
{
$order = new WC_Order($order_id);
$items = $order->get_items();
$ids_to_check = array(3422, 3423, 3424, 15);
foreach ($items as $item) {
$product_name = $item['name'];
$product_id = $item['product_id'];
$product_variation_id = $item['variation_id'];
if (in_array($product_id, $id_to_check) && $order->user_id > 0) {
update_user_meta($order->user_id, 'paying_customer', 1);
$user = new WP_User($order->user_id);
// Remove role
$user->remove_role('customer');
// Add role
$user->add_role('subscriber');
}
}
}
Чтобы перенаправить пользователя, если у него есть определенная роль, вы можете использовать следующее, если вы используете страницу входа в Woocommerce:
add_filter('woocommerce_login_redirect', 'my_login_redirect', 20, 2);
function my_login_redirect($redirect, $user)
{
if (in_array('subscriber', $user->roles)) {
// redirect them to another URL, in this case, the homepage
$url = get_permalink(get_option('woocommerce_checkout_page_id'));
$redirect = $url;
}
return $redirect;
}
если вы используете WordPress Форма входа по умолчанию, вы можете использовать следующую функцию:
add_filter('login_redirect', 'my_login_redirect', 20, 3);
function my_login_redirect($redirect_to, $request, $user)
{
//is there a user to check?
if (isset($user->roles) && is_array($user->roles)) {
//check for subscribers
if (in_array('subscriber', $user->roles)) {
// redirect them to another URL, in this case, the homepage
$url = get_permalink(get_option('woocommerce_checkout_page_id'));
$redirect_to = $url;
}
}
return $redirect_to;
}