1) Zjistím kombinaci tříd dopravy a celkovou hmotnost zboží v košíku:
<?php
function gog_get_cart_content() {
$cart_items = WC()->cart->get_cart();
$res = array(
'shipping' => 'default',
'weight' => 0
);
$shipping_stavebniny = false;
$shipping_default = false;
foreach ($cart_items as $item) {
if ($item['data']->get_shipping_class() == 'stavebniny') {
$shipping_stavebniny = true;
}
else {
$shipping_default = true;
}
$res['weight'] += (int) $item['data']->weight * $item['quantity'];
}
if ($shipping_stavebniny && $shipping_default) {
$res['shipping'] = 'both';
}
elseif ($shipping_stavebniny) {
$res['shipping'] = 'stavebniny';
}
return $res;
}
2) Zobrazím info zprávu, pokud jsou košíku produkty s třídou dopravy Stavebniny i bez ní
<?php
function gog_shipping_stavebniny_info() {
$res = gog_get_cart_content();
$shipping = $res['shipping'];
$weight = $res['weight'];
if ($shipping == 'both') {
echo '<tr><td colspan="2"><span class="red"><strong>Upozornění!</strong> V košíku máte produkty z kategorie Stavebniny, které vám doručí dodavatel přímo na vaši adresu. Pro ostatní produkty platí vámi zvolený způsob dopravy.</span></td></tr>';
}
}
add_action('woocommerce_review_order_before_shipping', 'gog_shipping_stavebniny_info', 20);
3) Schovám nepovolené způsoby dopravy
<?php
function gog_hide_shipping_methods($rates, $package) {
$res = gog_get_cart_content();
$shipping = $res['shipping'];
$weight = $res['weight'];
$zasilkovna_method = 'zasilkovna>z-points';
$ppl_method = 'flat_rate:7';
$stavebniny_method = 'flat_rate:13';
$osobni_method = 'local_pickup:6';
$ppl_weight = 30;
$zasilkovna_weight = 4.9;
if ($shipping == 'both') {
unset($rates[$stavebniny_method]);
}
elseif ($shipping == 'stavebniny') {
unset($rates[$zasilkovna_method]);
unset($rates[$ppl_method]);
unset($rates[$osobni_method]);
}
elseif ($shipping == 'default') {
unset($rates[$stavebniny_method]);
}
if ($weight > $ppl_weight) {
unset($rates[$ppl_method]);
}
if ($weight > $zasilkovna_weight) {
unset($rates[$zasilkovna_method]);
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'gog_hide_shipping_methods', 10, 2);
4) naúčtuji poplatek za dopravu při objednávce stavebnin za méně než 1000 Kč
<?php
function gog_shipping_fee() {
$res = gog_get_cart_content();
$shipping = $res['shipping'];
if ($shipping == 'stavebniny' || $shipping == 'both') {
if ($res['stavebniny_price'] < 1000) {
WC()->cart->add_fee('Příplatek za dopravu od smluvního dodavatele', 99);
}
}
}
add_action('woocommerce_cart_calculate_fees','gog_shipping_fee');