Importar un feed de Clickwise en WooCommerce con WP All Import
Actualizada: 2026-09-30.
1. Qué cubre esta guía
Clickwise entrega feeds de productos por mercado (esquema RSS/XML de Google Shopping) a los afiliados aprobados en un programa. Cada ítem trae GTIN, título, descripción, precio con moneda, imagen, disponibilidad y un enlace de compra con tracking de comisión. Esta guía muestra cómo convertir ese feed en productos External/Affiliate de WooCommerce: páginas de catálogo en tu propio sitio cuyo botón «Comprar» lleva al visitante al comercio a través del enlace trackeado, sin carrito, sin checkout y sin inventario de tu lado.
La herramienta es WP All Import Pro más el WooCommerce Add-On Pro (ambos de Soflyy). Las ediciones gratuitas de WordPress.org permiten subir un archivo y crear productos Simple, útil para una primera mirada al feed, pero no crean productos External/Affiliate, no descargan desde una URL y no se ejecutan por programación. Esas tres capacidades son justamente lo que necesita un catálogo de afiliado en producción, así que las ediciones Pro son requisito obligatorio para el flujo objetivo.
Lo que esta guía no cubre: envío a Google Merchant Center o Microsoft Merchant Center (la página de feeds de Clickwise lo trata aparte), tiendas multimoneda, productos variables y PHP personalizado en plantillas más allá de un ejemplo opcional.
2. Requisitos
| Componente | Mínimo para este flujo | Notas |
|---|---|---|
| WordPress | Versión actual (prueba local: 6.8.3) | Sitio HTTPS con URL pública estable. |
| WooCommerce | 9.2 o superior (prueba local: 9.9.5) | 9.2 incorporó el campo nativo «GTIN, UPC, EAN or ISBN», guardado como global_unique_id. |
| PHP | 7.4 o superior | Requisito declarado por el add-on. |
| WP All Import Pro | Versión actual | Necesario para «Download a file › From URL» y para importaciones programadas/recurrentes. La edición gratuita (4.1.1) muestra un aviso de actualización en ambos. |
| WP All Import WooCommerce Add-On Pro | Versión actual (probada la gratuita 1.5.5) | Necesario para el tipo External/Affiliate product. El add-on gratuito lista «Import External/Affiliate products», «Import files from a URL» y «Cron Job/Recurring Imports» como funciones Pro y deshabilita los campos externos. |
| Acceso a cron del servidor, o el servicio Automatic Scheduling de WP All Import | Uno de los dos | Las URL de trigger/processing deben llamarse por programación desde fuera de WordPress. |
| Moneda de la tienda | La misma del feed que pediste | Mapear un precio no convierte automáticamente la moneda del feed. Un feed de EE. UU. viene en USD; pon WooCommerce › Ajustes › General › Moneda en USD. |
| Cuenta de afiliado en Clickwise | Aprobada en al menos un programa | La habilitación de feeds es automática una vez aprobado. |
No mezcles ediciones: si están activos el WP All Import gratuito o el add-on gratuito, desactívalos y elimínalos antes de instalar la edición Pro (el aviso de actualización dice lo mismo).
3. Conseguir tu feed de Clickwise
- Regístrate como afiliado en https://partners.clickwise.net/en/signup_affiliate/. Durante el alta indica el mercado (país), la categoría y el formato que quieres. Elige XML para WP All Import (existen TSV, CSV y JSON, pero XML conserva los nombres de campo que usa esta guía).
- Aprobación en el programa. Los feeds se arman con los programas en los que estás aprobado. Aplica a los programas cuyos productos quieres listar; la aprobación la decide cada anunciante o red, programa por programa.
- Habilitación y URL firmada. Los afiliados aprobados reciben automáticamente la habilitación a los feeds elegibles. La URL firmada llega por correo electrónico. Es personal: incluye tu identidad de afiliado y los parámetros de tracking que te pagan.
- Vencimiento y renovación. Una URL firmada vence a los 90 días. La renovación es automática: cada ciclo del servicio revisa tu entrega y la renueva cuando corresponde, siempre que siga vigente tu elegibilidad en el programa. Una entrega reciente puede conservar su URL actual. Usa siempre la URL vigente del correo más reciente; cuando llegue un correo de renovación, pega la nueva URL en tu importación (sección 7.4).
- Reglas del programa. Cada programa tiene un
terms_summaryen tu panel: mercados, canales y usos permitidos. Descargar el feed equivale a aceptar los términos de la red de cada programa incluido, más los términos de afiliado de Clickwise. El resumen es una comodidad; no reemplaza los términos. - La aceptación se registra en la descarga. La primera descarga GET completa del archivo se registra como aceptación (contador de descargas y marca de tiempo). Las peticiones
HEADy las respuestas304 Not Modifiedno cuentan como descargas nuevas.
Reglas de seguridad para esta URL:
- Nunca pegues la URL firmada en capturas, tickets, foros ni documentación. Trátala como una contraseña.
- No compartas una URL personal del feed con otro afiliado; los permisos y enlaces trackeados corresponden a la cuenta aprobada.
- Si se filtra una URL, contacta a Clickwise para reemplazar la entrega.
3.1 Ensaya con la muestra pública
Antes de usar tu URL firmada personal, puedes practicar todo el recorrido con https://partners.clickwise.net/feeds/guide/sample.xml. También puedes descargar CSV, TSV o JSON desde la página pública de feeds. Usa XML para seguir los nombres de campo de esta guía.
La muestra contiene tres productos ficticios, GTIN con checksum válido y enlaces a example.invalid: no se rastrea ni se vende nada. Tiene la misma estructura que un feed real. En Pro, elige Download a file › From URL y pega la URL de la muestra. En la edición gratuita, descarga el archivo y usa Upload a file.
Las capturas muestran un ensayo con la edición gratuita, tres productos ficticios y la misma estructura de campos. Usa la muestra pública enlazada arriba para tu propio ensayo.
4. Entender el feed antes de mapearlo
4.1 Estructura
Este es el contenido completo de la muestra pública, con sus tres ítems; sólo se ha añadido indentación. El XML es un documento RSS 2.0 con el namespace de Google Merchant. Los enlaces de esta muestra apuntan a example.invalid, sin compras ni tracking real:
<?xml version='1.0' encoding='utf-8'?>
<rss xmlns:g="http://base.google.com/ns/1.0" version="2.0">
<channel>
<title>Clickwise GTIN feed</title>
<link>https://partners.clickwise.net/feeds/</link>
<description>Authorized product offers with tracked affiliate links.</description>
<item>
<g:id>cw-gtin-demo-one</g:id>
<title>Demo One</title>
<description>Fictional sample product: Demo One.</description>
<link>https://example.invalid/dl/demo-one/?sub_id=feed_demo_us</link>
<g:image_link>https://partners.clickwise.net/static/images/clickwiselogo.png</g:image_link>
<g:availability>in_stock</g:availability>
<g:price>19.90 USD</g:price>
<g:brand>Demo Brand</g:brand>
<g:gtin>0000000000017</g:gtin>
<g:identifier_exists>true</g:identifier_exists>
<g:condition>new</g:condition>
<g:product_type>Demo products</g:product_type>
<g:custom_label_0>Demo Shop</g:custom_label_0>
<g:custom_label_1>Demo Network</g:custom_label_1>
<g:custom_label_2>US</g:custom_label_2>
<g:seller_name>Demo Shop</g:seller_name>
<g:ads_redirect>https://example.invalid/dl/demo-one/?sub_id=feed_demo_us</g:ads_redirect>
</item>
<item>
<g:id>cw-gtin-demo-two</g:id>
<title>Demo Two</title>
<description>Fictional sample product: Demo Two.</description>
<link>https://example.invalid/dl/demo-two/?sub_id=feed_demo_us</link>
<g:image_link>https://partners.clickwise.net/static/images/clickwiselogo.png</g:image_link>
<g:availability>in_stock</g:availability>
<g:price>29.90 USD</g:price>
<g:brand>Demo Brand</g:brand>
<g:gtin>0000000000024</g:gtin>
<g:identifier_exists>true</g:identifier_exists>
<g:condition>new</g:condition>
<g:product_type>Demo products</g:product_type>
<g:custom_label_0>Demo Shop</g:custom_label_0>
<g:custom_label_1>Demo Network</g:custom_label_1>
<g:custom_label_2>US</g:custom_label_2>
<g:seller_name>Demo Shop</g:seller_name>
<g:ads_redirect>https://example.invalid/dl/demo-two/?sub_id=feed_demo_us</g:ads_redirect>
</item>
<item>
<g:id>cw-gtin-demo-three</g:id>
<title>Demo Three</title>
<description>Fictional sample product: Demo Three.</description>
<link>https://example.invalid/dl/demo-three/?sub_id=feed_demo_us</link>
<g:image_link>https://partners.clickwise.net/static/images/clickwiselogo.png</g:image_link>
<g:availability>out_of_stock</g:availability>
<g:price>39.90 USD</g:price>
<g:brand>Demo Brand</g:brand>
<g:gtin>0000000000031</g:gtin>
<g:identifier_exists>true</g:identifier_exists>
<g:condition>new</g:condition>
<g:product_type>Demo products</g:product_type>
<g:custom_label_0>Demo Shop</g:custom_label_0>
<g:custom_label_1>Demo Network</g:custom_label_1>
<g:custom_label_2>US</g:custom_label_2>
<g:seller_name>Demo Shop</g:seller_name>
<g:ads_redirect>https://example.invalid/dl/demo-three/?sub_id=feed_demo_us</g:ads_redirect>
</item>
</channel>
</rss>
El elemento de registro es item, ruta /rss/channel/item. Tres elementos no llevan prefijo: title, description, link. Todo lo demás usa el prefijo g:.
Cómo muestra WP All Import el prefijo. WP All Import reescribe los nombres de etiqueta con namespace reemplazando los dos puntos por un guion bajo. En el árbol de elementos y en las plantillas vas a ver g_id, g_price, g_gtin, g_image_link, y los marcadores son {g_id[1]}, {g_price[1]}, {g_gtin[1]}, {g_image_link[1]}. No escribas {g:price[1]}; no resuelve. La captura siguiente muestra el árbol de elementos.

4.2 Referencia de campos
La tabla enumera los elementos que emite la muestra pública. Los campos vacíos de un feed real se omiten del ítem, así que un marcador puede resolver a una cadena vacía. Mapea en consecuencia. En un feed real, link y g:ads_redirect contienen enlaces de compra con tracking; en esta muestra son enlaces ficticios a example.invalid.
| Elemento | Presencia en el feed real | Significado y cómo usarlo |
|---|---|---|
g:id |
sí | Identificador estable de la oferta (cw-gtin-<id de oferta>). Úsalo como SKU y como Unique Identifier de la importación. No cambia durante la vida de la oferta. |
title |
sí | Nombre del producto, texto plano, hasta 150 caracteres. |
description |
sí | Descripción en texto plano, hasta 5000 caracteres. |
link |
sí | La URL de compra trackeada. Es el Product URL del producto externo (ver 4.3). |
g:image_link |
sí | URL de la imagen principal (HTTPS). |
g:availability |
sí | Uno de in_stock, out_of_stock, preorder, backorder. El feed trae disponibilidad, nunca cantidades. |
g:price |
sí | NN.NN CCC, dos decimales, punto como separador decimal, código ISO de moneda (19.90 USD). |
g:brand |
casi siempre | Marca, hasta 70 caracteres. |
g:gtin |
casi siempre | GTIN como cadena de texto, con checksum validado, puede empezar con ceros. No es único por ítem cuando varios comercios venden el mismo producto. |
g:identifier_exists |
sí | true cuando hay GTIN (o marca + MPN); false en caso contrario. |
g:condition |
sí | new, used o refurbished. |
g:product_type |
si no está vacío | Ruta de categoría del comercio. |
g:custom_label_0 |
si no está vacío | Nombre del programa. |
g:custom_label_1 |
si no está vacío | Nombre de la red. |
g:custom_label_2 |
si no está vacío | Código de país del feed (US, DE, ...). |
g:seller_name |
si no está vacío | Tienda o nombre del programa; identifica al vendedor real. |
g:ads_redirect |
sí | Deeplink trackeado (igual a link salvo que se use una plantilla de landing). |
Estos elementos no están en la muestra, pero pueden aparecer en tu feed real cuando se cumplen estas condiciones:
g:additional_image_link: la fuente proporciona imágenes adicionales explícitas; se eliminan duplicados y se incluyen hasta 10.g:sale_price: la fuente proporciona un precio de oferta positivo, menor que el precio normal y en la misma moneda; el valor redondeado también debe seguir siendo positivo y menor.g:mpn: la oferta proporciona un número de parte del fabricante no vacío.g:google_product_category: la resolución de categoría devuelve un ID de taxonomía de Google.g:item_group_id: la fuente proporciona explícitamente un identificador de grupo no vacío.g:shipping: una fuente enriquecida proporciona un diccionario de envío para el país solicitado con precio exactamente cero; contieneg:countryyg:price.g:clickwise_link: se usalanding_template; conserva el enlace con tracking mientraslinkapunta a tu página (ver 4.3).
No hay elemento SKU. El SKU propio del comercio no se serializa. Usa g:id como SKU de tu lado y guarda el GTIN en el campo GTIN dedicado.
4.3 Qué URL va en «Product URL»
Todo el flujo se resume en que el botón de tu página de producto mande al visitante por el enlace trackeado. Nunca uses la URL de la página del comercio sin tracking, y nunca edites, acortes ni quites parámetros del enlace trackeado.
- Entrega por defecto (sin
landing_template):linkes la URL trackeada. Mapea Product URL a{link[1]}.g:ads_redirecttrae el mismo valor. - Entrega con
landing_template: esta opción existe para flujos de Google Merchant Center dondelinkdebe apuntar a tu propio dominio reclamado. En ese casolinkapunta a tu página y el deeplink trackeado pasa ag:clickwise_link(yg:ads_redirect). Para un catálogo de afiliado en WooCommerce no necesitas plantilla de landing. Si tu URL firmada la trae agregada, quita el parámetro (usa la URL firmada simple) o mapea Product URL a{g_clickwise_link[1]}.
Regla práctica: Product URL siempre tiene que resolver a una URL que lleve el tracking de Clickwise. Ante la duda, abre un valor de link del archivo en una ventana privada y confirma que pasa por la redirección de tracking antes de llegar al comercio.
4.4 Identificadores: qué es único y qué no
g:ides único por oferta y estable entre corridas. Úsalo para el matching.g:gtinidentifica el producto, no la oferta. Dos comercios en el mismo feed (o dos feeds de país) pueden listar el mismo GTIN. WooCommerce exige unicidad de su campo GTIN entre todos los productos, así que un segundo producto con el mismo GTIN será rechazado por ese control. Nunca uses el GTIN como Unique Identifier, y espera colisiones de GTIN si importas varios comercios o mercados en una misma tienda (ver FAQ).- Un feed de país → una importación de WP All Import. No mezcles feeds en la misma importación: la lógica de «registros faltantes» se evalúa por archivo de importación.
5. Paso a paso: crear la importación
Ruta de menú en WordPress: All Import › New Import. Las capturas referenciadas abajo se tomaron con las ediciones gratuitas (WP All Import 4.1.1, WooCommerce Add-On 1.5.5) y un archivo sintético de tres ítems; ilustran el recorrido gratuito. Sigue los enlaces oficiales para los pasos Pro.
Paso 1 — Archivo de origen: Download a file › From URL (Pro)
- Haz clic en Download a file y luego en From URL.
- Pega la URL firmada vigente del correo de Clickwise y haz clic en Download.
- Espera a que termine la descarga y aparezca la vista previa del archivo.
Para un ensayo, pega la URL de la muestra pública https://partners.clickwise.net/feeds/guide/sample.xml en lugar de tu URL firmada personal.
Nunca hagas una captura de esta pantalla con tu URL real en el campo.
Paso Pro Este paso requiere WP All Import Pro. Instrucciones oficiales: WP All Import
Paso 2 — Create or modify: WooCommerce Products
En Create or modify… elige WooCommerce Products. Luego:

- Set Up Import va directo a la plantilla (Paso 3).
- Create Filters permite limitar qué ítems se importan (sección 8.2) antes de continuar.
WP All Import detecta el elemento repetido automáticamente. En la corrida local el navegador de registros mostró «1 of 3» y la pantalla de confirmación indicó que procesaría «all 3 <item> records». Si alguna vez la detección elige el elemento equivocado, fija el XPath en /rss/channel/item.
Paso 3 — Plantilla: mapear los campos
Arrastra elementos del árbol de la derecha a los campos, o escribe los marcadores.
Title & Description

| Campo | Valor |
|---|---|
| Title | {title[1]} |
| Description (contenido) | {description[1]} |
| Short description | dejar vacío, o una frase fija como «Vendido por {g_seller_name[1]}. Precio y disponibilidad según la última actualización del feed.» |
WooCommerce Add-On › Product Type
Selecciona External/Affiliate product en el add-on Pro para habilitar Product URL y Button text.
Paso Pro Este paso requiere WP All Import Pro. Instrucciones oficiales: WP All Import
Pestaña General (campos externos y precio)
| Campo | Valor | Por qué |
|---|---|---|
| Product URL | {link[1]} |
El enlace de compra trackeado (ver 4.3). |
| Button text | Buy (o «Comprar» si tu tienda está en español) |
Reemplaza el «Buy product» por defecto de WooCommerce. Sé honesto: el visitante sale de tu sitio. |
| Regular Price | {g_price[1]} |
El valor del feed se ve como 19.90 USD. |
| Sale Price | {g_sale_price[1]} |
Vacío cuando el feed no trae precio de oferta; WooCommerce muestra entonces sólo el precio regular. |
| Remove currency symbols from price | marcado (por defecto) | Quita USD para que 19.90 USD se guarde como 19.9. Verificado en la corrida local: guardado 19.9, mostrado $19.90. |
| Convert decimal separator to a period | marcado (por defecto) | Inofensivo; el feed ya usa punto. |
| Tax status / class | dejar por defecto | No se vende nada en tu sitio. |
No apliques las opciones de ajuste de precio (porcentaje o fijo) salvo que las reglas del programa permitan precios alterados. El precio mostrado debe coincidir con el del comercio.
Pestaña Inventory

| Campo | Valor | Por qué |
|---|---|---|
| SKU | {g_id[1]} |
Único por oferta, estable, y WooCommerce exige SKU únicos. |
| GTIN, UPC, EAN or ISBN | {g_gtin[1]} |
Campo nativo de WooCommerce 9.2+. El valor XML es texto, así que los ceros iniciales sobreviven (0000000000017 se guardó intacto en local). |
| Manage stock? | No | Los productos externos no pueden gestionar stock; WooCommerce rechaza manage_stock = yes para ellos. |
| Stock status | dejar «Set automatically» | Ver sección 8.1: WooCommerce fuerza los productos externos a In stock. No mapees g_availability aquí. |
| Stock quantity | dejar vacío | El feed no trae cantidades; nunca inventes una. |
La disponibilidad como dato que sí puedas usar. Como WooCommerce ignora el estado de stock en productos externos, guarda la disponibilidad del feed donde puedas leerla:
- Sección Custom Fields: nombre
_clickwise_availability, valor{g_availability[1]}. - Pestaña Attributes: atributo
Availability, valor{g_availability[1]}, «Show in product page» marcado, «Is taxonomy» desmarcado (o marcado si quieres filtrar por él en la tienda). Opcionalmente agregaSeller={g_seller_name[1]},Brand={g_brand[1]},Condition={g_condition[1]},Country={g_custom_label_2[1]},Program={g_custom_label_0[1]}.
Tu tema o un snippet corto puede mostrar entonces «No disponible actualmente en el comercio» cuando el atributo sea out_of_stock, y «Preventa» para preorder.
Sección Images

- Selecciona Download images hosted elsewhere.
- En el cuadro, una URL por línea o separadas por coma:
{g_image_link[1]}. Para incluir imágenes de galería agrega,{g_additional_image_link[1]},{g_additional_image_link[2]}(los marcadores vacíos se ignoran). - Deja marcado Set the first image to the Featured Image.
- Deja marcado Search through the Media Library for existing images before importing new images › Match image by URL, así las corridas siguientes no vuelven a descargar la misma imagen.
- Deja desmarcado If no images are downloaded successfully, create entry as Draft, salvo que prefieras ocultar productos sin imagen.
El host de imágenes es el CDN del comercio. Tu servidor tiene que poder alcanzarlo. Un CDN real de comercio sigue sin probarse.
Categorías y taxonomías
Mapea las categorías de producto de WooCommerce a {g_product_type[1]} (ruta de categoría del comercio) si está presente, o a una categoría fija por importación (por ejemplo la categoría que pediste en el alta). Usa la opción «hierarchical» con > como separador si mapeas g_product_type.
Advanced Options
Usa Draft mientras revisas la primera importación; después publica las ofertas verificadas. Fija el autor si hace falta.
Paso 4 — Import Settings

| Ajuste | Valor | Por qué |
|---|---|---|
| How do you want to import | Create new Products for each record in this import file | La primera corrida crea; las siguientes actualizan por Unique Identifier. |
| Unique Identifier | {g_id[1]} |
Estable por oferta. No aceptes el valor autodetectado si incluye el título (la autodetección local propuso título + id); bórralo y escribe {g_id[1]}. Cambiar el identificador después de la primera corrida genera duplicados, así que déjalo bien ahora. |
| Create new products from records newly present in your file | marcado | Las ofertas nuevas aparecen como productos nuevos. |
| Update existing products with changed data in your file | marcado | Precio, disponibilidad, enlace e imágenes siguen al feed. |
| Skip products if their data in your file has not changed | marcado | Corridas más rápidas. |
| Update all data / Choose which data to update | ver abajo | |
| Remove or modify products that are not present in this import file | ver sección 8.3 | Decídelo de forma deliberada. |
Choose which data to update. Si editas a mano los productos importados (texto SEO, categorías extra, descripciones propias), elige Choose which data to update y marca sólo los campos que son del feed: datos de producto (precios, Product URL y texto del botón), custom fields para _clickwise_availability, atributos, imágenes y, opcionalmente, título. Deja sin marcar contenido, categorías y todo lo que curas manualmente. A la inversa, nunca edites a mano campos que son del feed (precio, Product URL, SKU, GTIN): la siguiente corrida programada los sobrescribe.
Scheduling Options: ver sección 7 (Pro).
Paso 5 — Confirm & Run
Revisa el resumen y haz clic en Confirm & Run Import. WP All Import procesa el archivo por lotes y muestra una pantalla «Import Complete» con la cantidad de registros creados, actualizados, omitidos y borrados. La importación queda listada en All Import › Manage Imports con su historial.
Sólo como referencia, la prueba local con la edición gratuita y productos Simple creó productos (tres productos creados, SKU cw-demo-us-1..3, precios 19.90/29.90/39.90, GTIN guardado con ceros iniciales). Esos no son productos externos y no validan el botón Comprar.


Paso Pro Este paso requiere WP All Import Pro. Instrucciones oficiales: WP All Import
6. Verificar el resultado
- Products › All Products: los productos existen, tipo «External/Affiliate», SKU =
g:id, precio en la moneda de la tienda. - Pantalla de edición › Inventory: el campo GTIN muestra el código completo con los ceros iniciales.
- Página de producto en el frontend: el botón dice «Buy» y su
hrefes el enlace trackeado, sin cambios. Pasa el cursor por el botón o inspecciona el HTML. No hagas clic repetidamente desde tu propia IP; algunos programas lo cuentan como tráfico inválido. - Página de tienda: los productos externos también muestran el botón en el listado (WooCommerce usa el Product URL como URL de «añadir al carrito» para este tipo).
- Manage Imports › History Logs: sin advertencias de imágenes ni de parseo de precios.
7. Mantener el catálogo actualizado (Pro)
Un feed cambia a diario: precios, ofertas, disponibilidad, ofertas nuevas, ofertas retiradas. La importación tiene que volver a correr por programación y volver a descargar el archivo cada vez.
7.1 Dos formas de programar
- Automatic Scheduling (servicio opcional de pago de Soflyy): elige frecuencia, días y horarios en Manage Imports › Scheduling Options › Automatic Scheduling. No requiere acceso al servidor.
- Manual Scheduling (cron jobs): creas dos tareas cron en tu servidor (o en cualquier servicio de cron externo) que llaman a dos URL.
Ambas exigen una importación creada desde Download from URL o Use existing file; un archivo subido no puede programarse.
El WP-Cron propio de WordPress no es un sustituto. Sólo se dispara cuando alguien visita el sitio y los hostings pueden desactivarlo; la documentación de WP All Import está construida sobre tareas cron reales (wget, curl, lynx) o el servicio Automatic Scheduling.
7.2 Los dos endpoints
Ambos los sirve wp-load.php con tres parámetros de consulta:
| Parámetro | Valor | Dónde encontrarlo |
|---|---|---|
import_key |
tu clave secreta | All Import › Settings (sección «Cron / Scheduling»). Mantenela secreta; autoriza la ejecución. |
import_id |
ID numérico de la importación | All Import › Manage Imports (columna ID). |
action |
trigger o processing |
Ver abajo. |
- Trigger (
action=trigger): marca la importación como pendiente. Ejecútalo una vez por día (o con la frecuencia con que quieras un refresco completo). El ciclo completo vuelve a obtener el archivo fuente. - Processing (
action=processing): hace el trabajo por tandas. Ejecútalo cada 2 minutos. Si no hay nada disparado, termina de inmediato; si hay una corrida en curso, continúa un rato, se detiene y espera a la siguiente llamada, hasta que todo el archivo queda procesado y la importación se «desdispara».
Ejemplo con marcadores: guarda el script como /opt/clickwise/refresh-feed.sh en tu servidor de cron. Reemplaza host, ID y clave en esa copia privada, limita los permisos a tu usuario (chmod 700) y usa rutas de log que pueda escribir. No se instaló ni ejecutó ningún cron en esta prueba.
#!/bin/sh
# SOLO PLANTILLA. Cópiala de forma privada al servidor de cron; reemplaza allí los marcadores.
set -eu
case "${1:-}" in
trigger|processing) action="$1" ;;
*) exit 2 ;;
esac
endpoint='https://your-store.example/wp-load.php'
import_key='YOUR_SECRET_KEY'
import_id='12'
if [ "$import_key" = 'YOUR_SECRET_KEY' ]; then
echo 'Configure the private local import key before using this template.' >&2
exit 2
fi
curl --fail --silent --show-error --max-time 110 --get "$endpoint" \
--data-urlencode "import_key=$import_key" \
--data-urlencode "import_id=$import_id" \
--data-urlencode "action=$action" \
--data-urlencode "rand=$(date +%s)"
15 3 * * * /opt/clickwise/refresh-feed.sh trigger >> /var/log/cw-trigger.log 2>&1
*/2 * * * * /opt/clickwise/refresh-feed.sh processing >> /var/log/cw-process.log 2>&1
Notas sobre la sintaxis de crontab:
- Pon la URL entre comillas dobles; de lo contrario el shell interpreta los
&. - Un
%literal en una línea de comando de crontab se convierte en salto de línea. Si tu URL contiene caracteres codificados con porcentaje, escapa cada uno como\%o mueve el comando a un script de shell y llama al script desde cron. - El script usa
randcon un timestamp para evitar reutilizar una respuesta cacheada. El%dedateestá dentro del script, fuera de crontab. - Mantén el intervalo de processing en 2 minutos; el intervalo de trigger es tu cadencia de refresco (diario es un valor razonable para precios y disponibilidad).
Paso Pro Este paso requiere WP All Import Pro. Instrucciones oficiales: WP All Import · WP All Import
7.3 Qué hace una corrida programada
Cada ciclo de importación programada vuelve a obtener el archivo desde la URL firmada y aplica las reglas del Paso 4: crea ofertas nuevas, actualiza las cambiadas, omite las sin cambios y aplica lo que hayas elegido para los registros ausentes del archivo. Clickwise soporta revalidación por ETag/Last-Modified y gzip en el endpoint del feed; WP All Import descarga el archivo completo, lo cual está bien a cadencia diaria.
7.4 Renovar la URL firmada
Cuando llegue un correo de renovación (antes del vencimiento a 90 días), abre Manage Imports, usa Settings de la importación (pantalla de ajustes) para cambiar el archivo de origen, pega la URL nueva, guarda y ejecuta una vez a mano para confirmar. Si la URL vence o termina tu elegibilidad, la descarga falla; WP All Import registra el error y, al no tener un archivo válido, no procesa registros. Revisa el historial si una corrida programada deja de actualizar productos.
8. Disponibilidad, filtros y bajas
8.1 Valores de disponibilidad y qué hace WooCommerce con ellos
| Valor del feed | Significado | Mapeo en producto Simple (referencia) | Producto External/Affiliate |
|---|---|---|---|
in_stock |
Disponible en el comercio | instock |
Forzado a In stock por WooCommerce |
out_of_stock |
No disponible ahora | outofstock |
Sigue In stock en WooCommerce |
preorder |
Se puede pedir, se envía después | lo más cercano es onbackorder |
Rechazado; WooCommerce fuerza In stock |
backorder |
Se puede pedir, se envía después | onbackorder |
Rechazado; WooCommerce fuerza In stock |
La clase de producto externo de WooCommerce fija el estado de stock en instock, manage_stock en falso y backorders en no sin importar lo que envíe un importador, y devuelve «External products cannot be stock managed.»
Consecuencias:
- La opción de WooCommerce «Hide out of stock items from the catalog» no oculta productos externos cuya disponibilidad en el feed sea
out_of_stock. No confíes en ella. - No mapees
g_availabilityal estado de stock en productos externos y no inventes una cantidad de stock. - Guarda la disponibilidad en el custom field o atributo descrito en el Paso 3 y deja que tu tema la muestre. Trata
preorderybackordercomo «se puede comprar, se envía más tarde»: conserva el botón Comprar, muestra la etiqueta.
8.2 Quitar ofertas agotadas con un filtro de importación
Si prefieres no listar ofertas no disponibles, fíltralas en el Paso 2 (Create Filters): elemento g_availability, regla equals, valor in_stock. El XPath generado equivale a:
/rss/channel/item[g_availability = "in_stock"]
Entiende el efecto secundario: un producto que se importó estando in_stock y luego pasa a out_of_stock deja de cumplir el filtro, así que en la siguiente corrida WP All Import lo ve como ausente del archivo. Qué le pasa lo decide el ajuste «Remove or modify products that are not present» (8.3). Sin ese ajuste, el producto simplemente deja de actualizarse y queda publicado con su último precio. Mantén coherentes el filtro y la política de bajas.
8.3 Registros ausentes del archivo
Opción del Paso 4 Remove or modify products that are not present in this import file. Sub-opciones (etiquetas según la documentación de WP All Import):
- alcance: registros creados o actualizados por esta importación (por defecto, seguro) versus todos los productos del sitio (peligroso, incluye productos hechos a mano);
- Send removed products to trash (por defecto);
- Change status of removed products to Draft (recomendado para catálogos de afiliado: reversible, conserva el ID y la URL del producto, desaparece de la tienda);
- Set custom fields for removed products (por ejemplo
_clickwise_availability = removed); - Delete removed products, opcionalmente con sus imágenes;
- Change stock status of removed WooCommerce products to Out of stock: inútil para productos externos (ver 8.1).
Recomendación: Draft, nunca Delete. Los ID de producto se mantienen estables, así que cuando la oferta vuelve al feed se actualiza y republica con el mismo ID en lugar de recrearse.
Revalida antes de confiar en una señal de «faltante». Las ofertas desaparecen de un feed por varias razones: el comercio las retiró, el programa se pausó, cambió tu elegibilidad, o la URL firmada venció y la descarga devolvió un error. Antes de activar una política de baja destructiva, o cuando una corrida pase a borrador una cantidad inesperada de productos, revisa el historial por errores de descarga y confirma en tu panel de Clickwise que la entrega está vigente. Una descarga fallida no produce una lista vacía de ítems (WP All Import no puede parsearla y se detiene), pero un programa que temporalmente entregue cero ítems sí.
9. Buenas prácticas y cumplimiento
- Los enlaces quedan intactos. No acortes, enmascares, reescribas, agregues ni quites parámetros del enlace trackeado. El
sub_idde la URL es lo que atribuye la venta. Un plugin de «pretty links» que reemplace el destino rompe la atribución. - Un feed, una importación, un país. La moneda de la tienda debe coincidir con la del feed; no conviertas precios.
- Respeta las reglas del programa. Lee el
terms_summaryde cada programa (mercados, canales, usos) y los términos de la red que enlaza. Promociona sólo dentro de ellos; descargar el feed es aceptarlos. - Declara la relación de afiliado en las páginas de producto o en todo el sitio, según exija tu jurisdicción (FTC en EE. UU., ASA/CAP en el Reino Unido, normas de consumo de la UE) y las redes.
- Marca los enlaces salientes como patrocinados: WooCommerce no agrega
rel="sponsored nofollow"al botón Comprar; agrégalo desde tu tema o con un filtro sobre la salida del botón. - No eres el vendedor. Dilo donde importa: el precio y la disponibilidad mostrados son los del comercio en la última actualización del feed, la compra ocurre en el sitio del comercio, aplican sus términos y devoluciones.
- La elegibilidad en Google Merchant Center no es automática. Un catálogo de afiliado con botones que redirigen a comercios no es una página de producto comprable en el sentido de Google; reclamar tu dominio no lo vuelve elegible. La página de feeds de Clickwise describe la opción
landing_templatepara publishers que construyen páginas de producto conformes; ese es un proyecto aparte de este catálogo en WooCommerce. - Mantén los secretos fuera de capturas y tickets de soporte: URL firmada del feed,
import_key, URL de administración con tokens. - Haz backup antes de la primera corrida con una política de bajas activada, y prueba en una copia de staging del sitio.
- Atribución e ID. Conserva
g:idcomo SKU y Unique Identifier para que los ID de producto sobrevivan la rotación del feed. No fusiones comercios por GTIN en un solo producto; cada oferta es un producto.
10. Preguntas frecuentes
¿Puedo hacerlo con el WP All Import gratuito y el WooCommerce Add-On gratuito? No. Las ediciones gratuitas suben un archivo y crean productos Simple (eso es lo que hizo la prueba local). Los productos External/Affiliate, la descarga desde URL y las corridas programadas son funciones Pro de los respectivos plugins. Un producto Simple con precio y sin enlace de compra no es un listado de afiliado.
¿Qué productos Pro exactamente? WP All Import Pro (el importador base) y el WooCommerce Add-On Pro. Soflyy los vende juntos como WooCommerce Import Package; el aviso de actualización del add-on gratuito nombra ese paquete.
La descarga desde URL falla o devuelve una página de error. ¿Y ahora? Verifica que pegaste la URL vigente del último correo. Las URL firmadas vencen a los 90 días; un correo de renovación trae una nueva. Pégala en los ajustes de origen de la importación y ejecuta a mano. Si no hubo correo de renovación, revisa tu elegibilidad en el programa en el panel de Clickwise.
Los marcadores {g:price[1]} no devuelven nada.
Usa guiones bajos: {g_price[1]}. WP All Import reemplaza los dos puntos del namespace por guion bajo en los nombres de elemento. Los elementos sin prefijo siguen siendo {title[1]}, {description[1]}, {link[1]}.
Los precios se importan como 0 o como texto.
Deja marcado «Remove currency symbols from price». El valor del feed es 19.90 USD; sin esa opción WooCommerce recibe una cadena no numérica. Confirma también que la moneda de la tienda coincide: Mapear el precio no convierte automáticamente la moneda del feed.
Faltan imágenes. Revisa el historial de la importación. Activa «Search through the Media Library › Match image by URL» para que las descargas exitosas se reutilicen en corridas posteriores.
Dos productos tienen el mismo GTIN y uno muestra el campo GTIN vacío.
Es lo esperado. El GTIN identifica el producto, no la oferta; varios comercios pueden venderlo. WooCommerce exige unicidad de su campo GTIN, así que el segundo producto no puede guardar el mismo valor. Conserva g:id como SKU e identificador único; si necesitas el GTIN crudo en todos los productos sin excepción, guarda además {g_gtin[1]} en un custom field como _clickwise_gtin.
No hay botón «Añadir al carrito» en la página de producto. Correcto e intencional. Los productos External/Affiliate no se pueden agregar a un carrito; WooCommerce muestra un único botón con tu Button text («Buy») que enlaza al Product URL.
Las ofertas agotadas siguen apareciendo como In stock.
WooCommerce fuerza los productos externos a In stock. Usa el atributo o custom field de disponibilidad para mostrar el estado real, o filtra in_stock al importar y pasa los productos ausentes a borrador.
¿Puedo poner la URL del feed en WP-Cron en vez de un cron del servidor? No como sustituto. Usa cron del servidor (dos tareas) o el servicio Automatic Scheduling de WP All Import.
¿Puedo editar a mano los productos importados? Sólo los campos que no son del feed, y sólo si configuras «Choose which data to update» para que las corridas siguientes no toquen esos campos. Precio, Product URL, SKU, GTIN y disponibilidad pertenecen al feed.
¿Y si quiero varios países? Pide un feed por mercado en el alta, crea una importación por feed y asegúrate de que cada tienda (o cada contexto de moneda) coincida con la moneda del feed. No combines dos feeds de país en una importación.
11. Referencias oficiales
- Clickwise: feed access and program rules
- Clickwise: muestra pública de feed (ficticia)
- Clickwise: affiliate signup
- WP All Import: free add-on and Pro requirements
- WP All Import: WooCommerce product import
- WP All Import: server cron
- WP All Import: source file and URL
- WP All Import: unique identifier
- WP All Import: missing records
- WooCommerce: product management
- WooCommerce 9.9.5: external product stock behavior