Есть сайт на WordPress и WooCommerce. На данный момент у меня уже есть функционал для нескольких условий при покупке продуктов пользователями:
Если пользователь не зарегистрирован и покупает какой-либо продукт, кроме подписки, он спокойно оформляет заказ, и система автоматически создает для него учетную запись. (Готово)
Если пользователь зарегистрирован, но забыл войти под своим логином, он также незаметно оформляет заказ, просто войдя под своим логином на странице оформления заказа. (Готово)
Если пользователь не зарегистрирован и хочет купить подписку, система перенаправляет ее на страницу регистрации, оттуда на страницу редактирования учетной записи, и он возвращается на страницу оформления заказа. (Готово)
Если пользователь зарегистрирован, но забыл войти под своим логином, и он хочет купить подписку. Пользователь перенаправляет на страницу регистрации. Он вводит логин и пароль. Система перенаправляет его обратно на страницу оформления заказа. (Задание)
Первые два условия, которые я создал, - это стандартные настройки WooCommerce. Для третьего условия у меня есть код, который можно увидеть:
add_action('template_redirect', 'woo_custom_redirect');
function woo_custom_redirect($redirect) {
// HERE set your product category (can be term IDs, slugs or names)
$category = 'subscriptions';
$found = false;
// CHECK CART ITEMS: search for items from our product category
foreach(WC()->cart->get_cart() as $cart_item) {
if (has_term($category, 'product_cat', $cart_item['product_id'])) {
$found = true;
break;
}
}
if (!is_user_logged_in() && is_checkout() && $found) {
wp_redirect('/my-account/edit-account/');
exit();
}
if (is_user_logged_in() && !WC()->cart->is_empty() && is_account_page()) {
wp_redirect( get_permalink( get_option('woocommerce_checkout_page_id') ) );
}
}
Для четвертого условия я добавил код:
if (is_user_logged_in() &&! WC()->cart->is_empty() && is_account_page ()) {
wp_redirect (get_permalink (get_option ('woocomm erce_checkout_page_id'))));
}
Но это не работает так, как должно. Третье условие перестает работать из-за этого кода.
Как это можно исправить? Спасибо!
Обновление: Я сохраняю его здесь. Это может помочь другим пользователям. Код полностью работает.
add_action( 'template_redirect', 'custom_redirections' );
function custom_redirections( $redirect ) {
// HERE set your product category (can be term IDs, slugs or names)
$category = 'subscriptions';
$found = false;
// CHECK CART ITEMS: search for items from our product category
foreach( WC()->cart->get_cart() as $cart_item ) {
if (has_term( $category, 'product_cat', $cart_item['product_id'] ) ) {
$found = true;
break;
}
}
if ( ! is_user_logged_in() && is_checkout() && $found ) {
wp_redirect( get_permalink( get_option('woocommerce_myaccount_page_id') ) );
exit();
} elseif ( is_user_logged_in() && is_account_page() && $found ) {
wp_redirect( get_permalink( get_option('woocommerce_checkout_page_id') ) );
exit();
}
}