Opción rápida
Pega el código de Instalación en el encabezado de tu tema o con un plugin de fragmentos de código que lo ponga en el <head> de todas las páginas. Con eso ya se miden las visitas.
Opción completa (recomendada)
Con un archivo propio, Albunea reconoce a tus clientes con sesión iniciada como verificados y recibe las compras desde tu servidor, aunque el navegador falle.
- Copia tu clave pública de Instalación y tu secreto del servidor de Ajustes › Secreto del servidor. El secreto se muestra una sola vez; si lo perdiste, genera otro.
- En wp-config.php agrega: define('ALBUNEA_SECRETO', 'alb_sec_…');
- Crea el archivo wp-content/mu-plugins/albunea.php con el código de abajo y cambia alb_pub_XXXXXXXX por tu clave.
- Revisa que el dominio de tu tienda esté en Ajustes › Dominios del panel. Albunea solo acepta datos que vienen de esos dominios; «*.tutienda.mx» incluye los subdominios.
- Abre tu tienda en otra pestaña y navega un poco. En el panel, en Instalación, verás «Última señal» con la página que acabas de abrir, normalmente en segundos.
<?php
/** Albunea para WooCommerce: script, identificación firmada (v2) y compras desde el servidor. */
const ALBUNEA_SITIO = 'alb_pub_XXXXXXXX';
const ALBUNEA_API = 'https://www.getalbunea.com';
add_action('wp_enqueue_scripts', function () {
wp_enqueue_script('albunea', ALBUNEA_API . '/s.js?k=' . rawurlencode(ALBUNEA_SITIO), [], null,
['strategy' => 'async', 'in_footer' => false]);
$cola = 'window.albunea=window.albunea||function(){(albunea.q=albunea.q||[]).push(arguments)};';
if (is_user_logged_in() && defined('ALBUNEA_SECRETO')) {
$u = wp_get_current_user();
$ts = time();
$id = ['externo' => (string) $u->ID, 'email' => $u->user_email, 'nombre' => $u->display_name,
'ts' => $ts, 'firma' => hash_hmac('sha256', $u->ID . '.' . $ts, ALBUNEA_SECRETO)];
$cola .= 'albunea("identificar",' . wp_json_encode($id, JSON_HEX_TAG | JSON_HEX_AMP) . ');';
}
wp_add_inline_script('albunea', $cola, 'before');
});
// Une la compra con la visita: guarda la cookie _alb en el pedido.
add_action('woocommerce_checkout_create_order', function ($pedido) {
$vid = isset($_COOKIE['_alb']) ? sanitize_text_field(wp_unslash($_COOKIE['_alb'])) : '';
if (preg_match('/^[A-Za-z0-9_-]{8,64}$/', $vid)) $pedido->update_meta_data('_albunea_v', $vid);
});
// Compra desde el servidor: nunca bloquea el pago (2 s máximo, sin esperar respuesta).
function albunea_evento_pedido(int $pedido_id, string $tipo): void {
if (!defined('ALBUNEA_SECRETO')) return;
$p = wc_get_order($pedido_id);
if (!$p) return;
$items = [];
foreach ($p->get_items() as $it) {
$items[] = ['item_id' => (string) $it->get_product_id(), 'item_name' => $it->get_name(),
'price' => (float) $p->get_item_subtotal($it, false), 'quantity' => (int) $it->get_quantity()];
}
$cuerpo = ['eventos' => [['t' => $tipo, 'p' => ['transaction_id' => (string) $p->get_id(),
'value' => (float) $p->get_total(), 'currency' => $p->get_currency(), 'items' => $items]]]];
if ($p->get_customer_id()) $cuerpo['perfil'] = ['externo' => (string) $p->get_customer_id()];
if ($v = $p->get_meta('_albunea_v')) $cuerpo['v'] = $v;
if (empty($cuerpo['perfil']) && empty($cuerpo['v'])) return;
wp_remote_post(ALBUNEA_API . '/v1/servidor/eventos', ['timeout' => 2, 'blocking' => false,
'headers' => ['Authorization' => 'Bearer ' . ALBUNEA_SECRETO, 'Content-Type' => 'application/json'],
'body' => wp_json_encode($cuerpo)]);
}
add_action('woocommerce_checkout_order_processed', fn ($id) => albunea_evento_pedido((int) $id, 'pedido_creado'));
add_action('woocommerce_payment_complete', fn ($id) => albunea_evento_pedido((int) $id, 'purchase'));
add_action('woocommerce_order_status_completed', fn ($id) => albunea_evento_pedido((int) $id, 'purchase'));
Cambia alb_pub_XXXXXXXX por la clave pública de tu tienda: la encuentras en el panel, en Instalación.
Buenas prácticas
- Si usas GTM4WP o Google Analytics for WooCommerce, ya llenan dataLayer con ver producto, agregar al carrito, iniciar el pago y compra; Albunea los toma sin más código.
- Una compra mandada dos veces (desde el navegador y desde el servidor) se cuenta una sola vez, porque se deduplica por el número de pedido.
- Pedidos con pago después (OXXO, depósito, contra entrega): el código manda «pedido_creado» al crear el pedido, para que la alerta de carrito en pausa no te avise de alguien que sí pidió.
- Con WP Rocket o LiteSpeed, excluye de la caché las páginas con sesión iniciada para que la firma no quede guardada.