Cum să afișezi prețul pe bucată și să forțezi multipli de bax în WooCommerce

YouTube Logo Urmărește canalul nostru de YouTube

Dacă ai un magazin WooCommerce și vinzi produse care se comercializează doar în baxuri (ex: 20 bucăți per bax), trebuie să ajustezi afișarea prețului și regulile de adăugare în coș. Acest cod personalizează WooCommerce astfel încât să:

  • Afișeze prețul per bucată și un mesaj informativ despre bax.
  • Forțeze adăugarea doar în multipli de bax.
  • Prevină modificarea manuală a cantității în coș.
  • Permită implementarea atât prin funcții PHP, cât și prin Code Snippets.

Cum implementezi acest cod?

Poți implementa acest cod în două moduri:

  1. Prin functions.php – Adaugă codul în fișierul functions.php al temei active.
  2. Prin Code Snippets – Instalează și activează pluginul „Code Snippets”, creează un nou snippet și inserează codul.

Cod complet

// Afișează prețul pe bucată și informația despre bax în pagina produsului
function custom_wc_display_price_per_piece($price, $product) {
    $bax_quantity = (int) get_post_meta($product->get_id(), '_bax_quantity', true);
    if ($bax_quantity > 1) {
        $price .= ' / buc';
        $price .= '<br><small class="bax-info" style="font-size: 0.45em;">ℹ️ Se vinde la bax de ' . $bax_quantity . ' bucăți</small>';
    }
    return $price;
}
add_filter('woocommerce_get_price_html', 'custom_wc_display_price_per_piece', 10, 2);

// Ajustează cantitatea la multipli de bax înainte de adăugare în coș
function custom_wc_adjust_quantity_before_add_to_cart($cart_item_data, $product_id) {
    $bax_quantity = (int) get_post_meta($product_id, '_bax_quantity', true);
    if ($bax_quantity > 1) {
        $cart_item_data['quantity'] = max($bax_quantity, ceil(($cart_item_data['quantity'] ?? $bax_quantity) / $bax_quantity) * $bax_quantity);
        $cart_item_data['bax_quantity'] = $bax_quantity;
    }
    return $cart_item_data;
}
add_filter('woocommerce_add_cart_item_data', 'custom_wc_adjust_quantity_before_add_to_cart', 10, 2);

// Afișează mesaj în coș că produsul se vinde doar la bax
function custom_wc_display_bax_notice_in_cart($item_name, $cart_item) {
    if (!empty($cart_item['bax_quantity'])) {
        $item_name .= '<br><small class="bax-cart-info">ℹ️ Se vinde doar la bax de ' . intval($cart_item['bax_quantity']) . ' bucăți.</small>';
    }
    return $item_name;
}
add_filter('woocommerce_cart_item_name', 'custom_wc_display_bax_notice_in_cart', 10, 2);

// Forțează multipli de bax în coș
function custom_wc_fix_cart_quantities($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        if (!empty($cart_item['bax_quantity'])) {
            $bax_quantity = (int) $cart_item['bax_quantity'];
            $new_quantity = ceil($cart_item['quantity'] / $bax_quantity) * $bax_quantity;
            
            if ($new_quantity !== $cart_item['quantity']) {
                $cart->set_quantity($cart_item_key, $new_quantity);
            }
        }
    }
}
add_action('woocommerce_before_calculate_totals', 'custom_wc_fix_cart_quantities');

// Adaugă câmp pentru setarea numărului de bucăți per bax în admin
function custom_wc_add_product_custom_fields() {
    woocommerce_wp_text_input([
        'id' => '_bax_quantity',
        'label' => __('Cantitate per bax', 'woocommerce'),
        'desc_tip' => true,
        'description' => __('Setează câte bucăți sunt într-un bax. Exemplu: 20', 'woocommerce'),
        'type' => 'number',
        'custom_attributes' => ['min' => '1', 'step' => '1']
    ]);
}
add_action('woocommerce_product_options_general_product_data', 'custom_wc_add_product_custom_fields');

// Salvează valoarea baxului în produs
function custom_wc_save_product_custom_fields($post_id) {
    $bax_quantity = isset($_POST['_bax_quantity']) ? (int) $_POST['_bax_quantity'] : 1;
    update_post_meta($post_id, '_bax_quantity', $bax_quantity);
}
add_action('woocommerce_process_product_meta', 'custom_wc_save_product_custom_fields');

// Adaugă CSS pentru stilizarea informațiilor despre bax
function custom_wc_add_bax_styles() {
    echo '<style>
        .bax-info {
            background: #fcfcfc;
            padding: 4px 8px;
            border-radius: 4px;
            display: inline-block;
            font-size: 0.45em;
            color:#aa001e;
            margin-top: 5px;
            border: 1px solid #aa001e;
        }
        .bax-cart-info {
            color: #d9534f;
            font-weight: bold;
            font-size: 0.85em;
        }
    </style>';
}
add_action('wp_head', 'custom_wc_add_bax_styles');

Cum setezi produsele pentru a funcționa corect?

  1. Accesează WordPress → Produse → Editează produsul dorit.
  2. În secțiunea „General” vei găsi câmpul „Cantitate per bax”.
  3. Introdu numărul de bucăți per bax (ex: 20 bucăți).
  4. Salvează produsul.

Rezultat :

Beneficii ale acestui cod:

Afișează prețul per bucată și mesajul despre bax în pagina produsului.
Forțează multipli de bax la adăugarea în coș.
Previne modificarea cantității în coș la valori incorecte.
Adaugă o secțiune în admin pentru setarea valorii per bax.
Include CSS pentru o afișare clară și estetică.

Acest cod asigură că utilizatorii nu pot comanda altceva decât multipli de bax și că sunt informați clar despre regulă.

 

× YouTube Logo

🔔 Abonează-te la canalul nostru!

Primește cele mai noi tutoriale WordPress direct pe YouTube!

×