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:
- Prin functions.php – Adaugă codul în fișierul
functions.php
al temei active. - 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?
- Accesează WordPress → Produse → Editează produsul dorit.
- În secțiunea „General” vei găsi câmpul „Cantitate per bax”.
- Introdu numărul de bucăți per bax (ex: 20 bucăți).
- 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ă.