Woocommerce после перенаправления оформления заказа, если элементы заказа относятся к определенным категориям продуктов

Мне нужно сделать так, чтобы когда люди нажимали «Разместить заказ» в нашем интернет-магазине, они получали перенаправление на «Мой аккаунт», но только если категории XXX , XXX , XXX

Но я не могу заставить его работать, к сожалению

Я пытался использовать && is_product_category('Category x','Category x','Category x')

// REDIRECT AFTER PLACE ORDER BUTTON!
add_action( 'woocommerce_thankyou', 'KSVS_redirect_custom');
function KSVS_redirect_custom( $order_id ){
    $order = new WC_Order( $order_id );

    $url = 'https://kanselvvilselv.dk/min-konto/';

    if ( $order->status != 'failed' ) {
        wp_redirect($url);
        exit;
    }
}

Работает без проставления && is_product_category('Category x','Category x','Category x'), Но зато работает по категориям, где не должно работать.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
3
0
689
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Обновлено, это должно перебирать все заказанные продукты, и если он соответствует 1 продукту с категорией, он будет перенаправлен на ваш URL-адрес:

add_action( 'woocommerce_thankyou', 'KSVS_redirectcustom');

function KSVS_redirectcustom( $order_id ){
    $order = wc_get_order( $order_id ); 
    $url = get_permalink( get_option('woocommerce_myaccount_page_id') );

    if ( $order->status != 'failed' ) {

        $product_cats = array('product-cat1', 'product-cat', 'product-cat3');

        foreach ($order->get_items() as $item) {

            if ( has_term( $product_cats, 'product_cat', $product->id) ) {
                $cat_check = true;
                break;
            }
        }

        if ( $cat_check ) {
            wp_redirect($url);
            exit;
        }
    }
}

попробуйте использовать is_product_category() в единственном числе без || для дополнительных 2 и посмотрите, работает ли это. Они заказывают со страницы категории, верно? Не страница оформления заказа?

Daniel Vickers 08.04.2019 13:56

Нет, это после окончательной проверки, когда они нажимают «Оформить заказ» - тогда их нужно перенаправить на страницу моей учетной записи, но это только для некоторых категорий :)

FizzelTV 08.04.2019 14:09

О да, неудивительно, что is_product_category() проверяет, является ли страница в настоящее время категорией продукта, вам нужно будет просмотреть все купленные товары, чтобы проверить, находятся ли они в одной из категорий, если да, то перенаправить. Если ответы других парней не исправят, я попробую

Daniel Vickers 08.04.2019 14:10

Примечание: я совсем не знаком с woocommerce, пожалуйста, примите мой ответ с легкостью. Похоже, что функция is_product_category имеет другое назначение, по краткому обзору я пришел с этим, попробуйте:

$redirectWhenCategoryIs = ['cat x', 'cat y', 'cat z'];

$categories = [];
foreach($order->get_items() as $item) {
    foreach(get_the_terms($item['product_id'], 'product_cat') as $term){
        $categories[] = $term->slug;
    }
}

if (count(array_intersect($redirectWhenCategoryIs, $categories))){
    wp_redirect($url);
}
Ответ принят как подходящий

Следующий код, использующий специальный хук template_redirect и условную функцию WordPress has_term()(для использования с категориями товаров), будет перенаправлять клиентов после оформления заказа в раздел моей учетной записи, когда их заказ содержит товары из определенных категорий продуктов:

add_action( 'template_redirect', 'order_received_redirection_to_my_account' );
function order_received_redirection_to_my_account() {
    // Only on "Order received" page
    if ( is_wc_endpoint_url('order-received') ) {
        global $wp;

        // HERE below define your product categories in the array
        $categories = array('Tshirts', 'Hoodies', 'Glasses');

        $order = wc_get_order( absint($wp->query_vars['order-received']) ); // Get the Order Object
        $category_found = false;

        // Loop theough order items
        foreach( $order->get_items() as $item ){
            if ( has_term( $categories, 'product_cat', $item->get_product_id() ) ) {
                $category_found = true;
                break;
            }
        }

        if ( $category_found ) {
            // My account redirection url
            $my_account_redirect_url = get_permalink( get_option('woocommerce_myaccount_page_id') );
            wp_redirect( $my_account_redirect_url );
            exit(); // Always exit
        }
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Другие вопросы по теме