¿Cómo querés recibir tu pedido?Patricio2025-09-27T15:46:16-03:00
¿Cómo querés recibir tu pedido?
Elegí una opción para continuar al pago.
session->set('picca_receive_type', $flow);
// Redirigimos al checkout sin querystring
wp_safe_redirect( wc_get_checkout_url() );
exit;
}
}
});
// 3) Cambiar el destino del botón "Proceder al pago" del carrito → nuestra página intermedia
add_filter('woocommerce_get_checkout_url', function ($url) {
if (is_cart()) {
$page = get_page_by_path(PICCA_CHOOSE_PAGE_SLUG);
if ($page) {
return get_permalink($page->ID);
}
}
return $url;
}, 9);
// 4) Ocultar dirección de envío cuando sea RETIRO
add_filter('woocommerce_cart_needs_shipping_address', function ($needs) {
if (WC()->session && 'pickup' === WC()->session->get('picca_receive_type')) {
return false;
}
return $needs;
}, 20);
// 5) Hacer opcionales campos de facturación en RETIRO (dejá nombre, email, teléfono como requeridos)
add_filter('woocommerce_checkout_fields', function ($fields) {
if (WC()->session && 'pickup' === WC()->session->get('picca_receive_type')) {
$optional = ['billing_country','billing_state','billing_city','billing_postcode','billing_address_1','billing_address_2','billing_company'];
foreach ($optional as $k) {
if (isset($fields['billing'][$k])) {
$fields['billing'][$k]['required'] = false;
}
}
}
return $fields;
});
// 6) Mostrar SOLO métodos coherentes con la elección (clave para que Iconic muestre los slots correctos)
add_filter('woocommerce_package_rates', function ($rates) {
$choice = WC()->session ? WC()->session->get('picca_receive_type', 'delivery') : 'delivery';
$filtered = [];
foreach ($rates as $rate_id => $rate) {
// === Ajustá esta detección a tus métodos de "retiro" ===
$is_pickup = (
$rate->method_id === 'local_pickup'
|| stripos($rate->label, 'Recoger') !== false
|| stripos($rate->label, 'Retiro') !== false
|| stripos($rate->label, 'Sucursal') !== false
|| stripos($rate->label, 'Recoleta') !== false
|| stripos($rate->label, 'Villa Urquiza') !== false
);
if ( ('pickup' === $choice && $is_pickup) || ('delivery' === $choice && !$is_pickup) ) {
$filtered[$rate_id] = $rate;
}
}
return !empty($filtered) ? $filtered : $rates;
}, 20, 1);
// 7) (Opcional) Resetear la elección si el carrito queda vacío
add_action('woocommerce_cart_emptied', function () {
if (WC()->session) {
WC()->session->__unset('picca_receive_type');
}
});