The Blog

Valor mínimo por fornecedor e por checkout


Como criar uma validação de valor mínimo por fornecedor na sua loja com WordPress e WooCommerce. Siga os passos abaixo e não esqueça de deixar um comentário para agregar nessa solução.

Notificações do pedido mínimo por fornecedor e valor total

Crie o atritubo marca em Produtos > Atributos, com a Slug ‘brands’ que conterá as marcas, conforme exemplo abaixo:

A descrição precisa conter o valor mínimo do pedido para o fabricante. O texto não é importante, será ignorado no script de análise do valor mínimo.

Agora você precisa personalizar o script do tema, conforme o conteúdo abaixo. Para isso clique em Aparência > Editor de Temas > functions.php e adicione as seguintes linhas:

<?php

/**
 * Set a minimum order amount for checkout
 */

add_action( 'woocommerce_checkout_process', 'wc_minimum_order_amount' );
add_action( 'woocommerce_before_cart' , 'wc_minimum_order_amount' );

function wc_minimum_order_amount() {
	
    $cart = WC()->cart->get_cart();

    foreach ( $cart as $cart_item_key => $cart_item ) {
		
        // Lista itens do carrinho
        $item_data = $cart_item['data'];
		
        // Identifica as variaveis
        $att = array_shift(wc_get_product_terms($item_data->get_id(), 'pa_brands'));

        // Busca o valor que está gravado na descrição do atributo
        $res = preg_replace('/[^0-9]/', '', $att->description);
        $minimum_selling = $res/100;

        // Identifica o nome do fabricante
        $brand_name = $att->name; // $item_data->get_attribute('pa_brands');
        $item_total = $cart_item['line_total'];
				
        // Agrupar total de produtos por fabricante
        $total_itens_fabricante[$brand_name] += $item_total;
        $pedido_minimo_fabricante[$brand_name] = $minimum_selling;
		
    }
	
    // Verificar se o total da compra por item esta abaixo do exigido pelo fabricante
    foreach ( $total_itens_fabricante as $fabricante => $valor_total ) {
        foreach ( $pedido_minimo_fabricante as $nome_fabricante => $valor_pedido_minimo ) {
            if ($nome_fabricante == $fabricante) {
                if ($valor_total < $valor_pedido_minimo) {
                    $message_minimum_selling = 'O valor do pedido para o fabricante %s precisa ser acima de %s.';
                    if ( is_cart() || is_checkout() ) {
                        wc_print_notice(
                            sprintf ( $message_minimum_selling,
                                    ($nome_fabricante),
                                    wc_price( $valor_pedido_minimo )
                            ), 'error'
                        );
                    }
                }
            }
        }
    }

    // Define um valor mínimo para pedidos na loja
    $minimum = 3000;
    $message = 'O valor total do seu pedido é de %s — Para finalizar o pedido, é necessrio atingir o valor mínimo de %s.';
	
    if ( WC()->cart->total < $minimum ) {
        if ( is_cart() || is_checkout() ) {
            wc_print_notice(
                sprintf ( $message,
                    wc_price( WC()->cart->total ),
                    wc_price( $minimum )
                ), 'error'
            );
        }
    }
}

Clique em ‘Atualizar arquivo’, para salvar as alterações.

Leave a comment