WooCommerce

Conversión de pedido sin doble conteo y qué no se puede testear.

WooCommerce es WordPress, así que la instalación de la etiqueta es la de WordPress. Lo específico de Woo es la conversión.

Registrar la compra

WooCommerce dispara woocommerce_thankyou en la página de pedido recibido. Es el único punto donde el pedido existe y está confirmado:

add_action('woocommerce_thankyou', function ($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order) {
        return;
    }

    // El pedido ya se contabilizó en una carga anterior de esta misma página.
    if ($order->get_meta('_growthlab_tracked') === 'yes') {
        return;
    }
    $order->update_meta_data('_growthlab_tracked', 'yes');
    $order->save();

    $payload = wp_json_encode([
        'revenue'  => (float) $order->get_total(),
        'currency' => $order->get_currency(),
        'orderId'  => (string) $order->get_order_number(),
        'items'    => $order->get_item_count(),
    ]);
    ?>
    <script>
      window.GrowthLab?.conversion('purchase', <?php echo $payload; ?>);
    </script>
    <?php
}, 10, 1);

Dos protecciones, y las dos hacen falta:

Importe con o sin impuestos

get_total() incluye impuestos y envío. Si quieres medir el ingreso neto de producto:

'revenue' => (float) $order->get_subtotal(),

Elige uno y no lo cambies a mitad de un experimento: cambiar la definición del ingreso invalida la comparación entre variantes que ya tienen datos.

Añadir al carrito

Woo dispara added_to_cart en el fragmento AJAX:

<script>
  jQuery(document.body).on('added_to_cart', function (event, fragments, hash, button) {
    window.GrowthLab?.track('add_to_cart', {
      productId: button?.data('product_id'),
      quantity: button?.data('quantity') || 1,
    });
  });
</script>

Qué no se puede testear

Precios. Woo calcula precio, impuestos y envío en el servidor. Cambiarlos con JavaScript sería cosmético: el cliente vería un importe y se le cobraría otro. Las pruebas de precio real requieren un experimento de servidor con feature flags, no una variante del editor visual.

Grabación en el checkout

El checkout de Woo está excluido de la grabación por defecto, junto con /mi-cuenta y /finalizar-compra. Es deliberado: esas páginas contienen dirección, teléfono y datos de pago.

Si necesitas grabar el checkout para diagnosticar un abandono, actívalo en Ajustes → Privacidad, sabiendo que el enmascarado de campos sigue aplicándose y que los campos de pago se bloquean siempre, sin excepción y sin ajuste que lo permita.