Woocommerce после перенаправления заказа, если позиции заказа принадлежат к определенным категориям продуктов - PullRequest
1 голос
/ 08 апреля 2019

Мне нужно сделать так, чтобы, когда люди нажимали «разместить заказ» в нашем интернет-магазине, они перенаправлялись на Мой аккаунт, но только если категории 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'), но тогда он работает с категориями, где он не должен работать.

Ответы [ 3 ]

1 голос
/ 08 апреля 2019

Следующий код с использованием выделенного 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 вашей активной дочерней темы (или активной темы).Проверено и работает.

0 голосов
/ 08 апреля 2019

Примечание: я совсем не знаком с 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);
}
0 голосов
/ 08 апреля 2019

Обновлено, это должно пройти через все заказанные продукты, и если оно соответствует 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...