/**
 * MarfloApps — Carrito promocional pre-llenado con cupón(es) automático(s).
 *
 * Parámetros de URL:
 *   ?add-to-cart=ID&quantity=N   → Producto principal (nativo WooCommerce, activa side cart)
 *   &fill-cart=ID:QTY,ID:QTY    → Productos adicionales agregados silenciosamente
 *   &fill-cart=none              → Solo vacía el carrito, sin agregar productos extra
 *   &coupon=CODIGO               → 1 cupón — nativo WooCommerce, aplicado automáticamente
 *   &coupons=CODE1,CODE2         → N cupones — parámetro personalizado, misma sesión
 */

// ── PASO 1: Vaciar carrito, agregar fill-cart y guardar cupón(es) en sesión ──
add_action('init', function() {
    if (!WC()->session) return;

    $is_promo = isset($_GET['fill-cart']) ||
                (isset($_GET['coupon'])  && isset($_GET['add-to-cart'])) ||
                (isset($_GET['coupons']) && isset($_GET['add-to-cart']));
    if (!$is_promo) return;

    // Vaciar carrito antes de construir el carrito promocional
    WC()->cart->empty_cart();

    // Guardar cupón(es) en sesión para aplicarlos cuando el carrito esté listo
    if (isset($_GET['coupons'])) {
        // Múltiples cupones: &coupons=CODE1,CODE2
        $codes = array_filter(array_map('trim', explode(',', sanitize_text_field($_GET['coupons']))));
        WC()->session->set('coupons_to_apply', array_values($codes));
    } elseif (isset($_GET['coupon'])) {
        // Un cupón: &coupon=CODE (también lo manejamos vía sesión para consistencia)
        $code = sanitize_text_field($_GET['coupon']);
        WC()->session->set('coupons_to_apply', [$code]);
    }

    // Agregar productos fill-cart silenciosamente (sin redirect)
    // fill-cart=none solo vacía el carrito sin agregar extras
    $fill = isset($_GET['fill-cart']) ? sanitize_text_field($_GET['fill-cart']) : '';
    if ($fill && $fill !== 'none') {
        foreach (explode(',', $fill) as $item) {
            $parts = explode(':', $item);
            if (count($parts) === 2) {
                $pid = (int) $parts[0];
                $qty = (int) $parts[1];
                if ($pid > 0 && $qty > 0) {
                    WC()->cart->add_to_cart($pid, $qty);
                }
            }
        }
    }
}, 20); // prioridad 20: corre después de que WC inicializa la sesión

// ── PASO 2: Aplicar cupón(es) cuando el carrito esté listo ───────────────
// Se intenta en tres momentos para cubrir carrito, mini-cart y checkout.

function _marflo_apply_pending_coupons() {
    if (!WC()->session || !WC()->cart) return;
    $codes = WC()->session->get('coupons_to_apply');
    if (!$codes) return;
    $remaining = [];
    foreach ($codes as $code) {
        if (!WC()->cart->has_discount($code)) {
            WC()->cart->apply_coupon($code);
        }
        // Si sigue sin aplicarse (código inválido/expirado), no reintentamos
        if (!WC()->cart->has_discount($code)) {
            $remaining[] = $code;
        }
    }
    // Limpiar sesión — si quedan códigos fallidos los descartamos igual
    WC()->session->__unset('coupons_to_apply');
}

add_action('woocommerce_before_cart',          '_marflo_apply_pending_coupons');
add_action('woocommerce_before_mini_cart',     '_marflo_apply_pending_coupons');
add_action('woocommerce_before_checkout_form', '_marflo_apply_pending_coupons');
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href="//dev.marflo.mx/wp-content/plugins/wordpress-seo/css/main-sitemap.xsl"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
	<sitemap>
		<loc>https://dev.marflo.mx/post-sitemap.xml</loc>
		<lastmod>2025-04-03T01:00:31+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/page-sitemap.xml</loc>
		<lastmod>2026-04-12T00:04:44+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/attachment-sitemap.xml</loc>
		<lastmod>2026-05-04T17:32:04+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/attachment-sitemap2.xml</loc>
		<lastmod>2026-05-04T17:32:04+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/product-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/announcement-sitemap.xml</loc>
		<lastmod>2026-01-13T17:01:35+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/portfolio-sitemap.xml</loc>
		<lastmod>2025-10-13T18:29:07+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/category-sitemap.xml</loc>
		<lastmod>2025-04-03T01:00:31+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/post_tag-sitemap.xml</loc>
		<lastmod>2025-04-03T01:00:31+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/product_brand-sitemap.xml</loc>
		<lastmod>2026-04-03T14:55:44+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/product_cat-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/product_tag-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/product_shipping_class-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/pa_f_claveprodserv-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/pa_f_claveunidad-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/pa_f_iva-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/pa_f_unidad-sitemap.xml</loc>
		<lastmod>2026-05-04T17:36:00+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/portfolio-category-sitemap.xml</loc>
		<lastmod>2025-10-13T18:29:07+00:00</lastmod>
	</sitemap>
	<sitemap>
		<loc>https://dev.marflo.mx/author-sitemap.xml</loc>
		<lastmod>2016-10-22T22:52:50+00:00</lastmod>
	</sitemap>
</sitemapindex>
<!-- XML Sitemap generated by Yoast SEO -->