Мне нужно руководство по коду. В настоящее время он у меня работает правильно. Код ограничивает комбинацию продуктов из разных категорий, то есть только вы можете добавить в корзину ...

1
victor daniel salazar marquez 14 Дек 2020 в 23:43

1 ответ

Лучший ответ

Вам необходимо использовать условие оператора IF роли пользователя внутри вашей функции следующим образом:

function avoid_add_to_cart_from_different_main_categories( $passed, $product_id, $quantity ) {
    if( WC()->cart->is_empty() )
        return $passed;
        
    $user = wp_get_current_user();

    if ( in_array( 'franquicia', $user->roles ) ) {
        $taxonomy  = 'product_cat';
        $ancestors = [];

        $terms = (array) wp_get_post_terms( $product_id, $taxonomy, array('fields' => 'ids') );

        if( count($terms) > 0 ) {
            // Loop through product category terms  set for the current product
            foreach( $terms as $term) {
                foreach( get_ancestors( $term, $taxonomy ) as $term_id ) {
                    $ancestors[(int) $term_id] = (int) $term_id;
                }
            }

            // Loop through cart items
            foreach ( WC()->cart->get_cart() as $item ) {
                $terms = (array) wp_get_post_terms( $item['product_id'], $taxonomy, array('fields' => 'ids') );
                if( count($terms) > 0 ) {
                    // Loop through product category terms set for the current cart item
                    foreach( $terms as $term) {
                        foreach( get_ancestors( $term, $taxonomy ) as $term_id ) {
                            $ancestors[(int) $term_id] = (int) $term_id;
                        }
                    }
                }
            }

            // When there is more than 1 parent product category
            if( count($ancestors) > 1 ) {
                wc_add_notice( __('Disculpa, NO puedes agregar a la misma orden/pedido productos que pertenezcan a distintas preventas o proveedores. Por favor, escoge solo productos que pertenezcan una misma preventa o proveedor.'), 'error' );
                $passed = false; 
            }
        }
    }
    return $passed;
}
add_filter( 'woocommerce_add_to_cart_validation', 'avoid_add_to_cart_from_different_main_categories', 10, 3 );

Код находится в файле functions.php активной дочерней темы (или активной темы). Лучше должно работать.

0
LoicTheAztec 15 Дек 2020 в 02:13