La pestaña Mapeo de Campos cubre la mayoría de las necesidades de personalización de feeds, pero a veces necesitas cambiar algo que no puede alcanzar: envolver un valor en un nodo XML personalizado, reestructurar una columna CSV que no está expuesta como un atributo, o reescribir la fila de encabezado para un sistema posterior. Product Feed Pro dispara un conjunto de ganchos de filtro dentro de sus escritores XML, CSV y TSV exactamente para esto. Engánchate a ellos desde un plugin personalizado, y puedes cambiar lo que realmente se escribe en el archivo de feed, sin tocar el núcleo del plugin.
Este artículo cubre los filtros a nivel de escritor y ejemplos de código que funcionan para cada uno. Para el catálogo completo de ganchos del plugin, incluidos los ganchos fuera de los escritores de feeds, consulta Ganchos y filtros disponibles en Product Feed Pro.
Prerrequisitos
| Requisito | Detalles |
|---|---|
| Plugin | Product Feed Pro, versión 13.5.7 o posterior |
| Dónde agregar código | Un plugin personalizado (específico del sitio), o el archivo functions.php de tu tema activo si no estás usando un tema hijo |
| Habilidades necesarias | Comodidad escribiendo PHP y registrando ganchos de filtro de WordPress |
Cómo funciona el escritor de feeds
Product Feed Pro utiliza un escritor para feeds XML y un escritor compartido para feeds CSV y TSV (TSV utiliza la misma ruta de código que CSV, solo que con un carácter de tabulación como delimitador). Durante la generación del feed, el plugin consulta un lote de productos, construye los datos de cada producto y luego entrega esos datos al escritor para el formato del feed. Los filtros a continuación se encuentran dentro de ese paso de escritura: se ejecutan una vez por producto, o una vez por ejecución de generación de feed para los ganchos de encabezado y enlace de canal. Debido a que se activan durante la salida del escritor, los cambios realizados aquí solo se aplican al formato al que se dirigen. Un filtro en el escritor XML no afecta a un feed CSV, y viceversa.
Filtros de feed XML
adt_product_feed_xml_attribute_value: Filtra el valor de un solo atributo XML justo antes de que se escriba en el nodo XML del producto. Úsalo para cambiar la salida de un atributo para feeds XML sin tocar ningún otro atributo o formato.
add_filter( 'adt_product_feed_xml_attribute_value', 'my_custom_xml_attribute_value', 10, 5 );
function my_custom_xml_attribute_value( $value, $key, $product, $product_data, $feed ) {
if ( 'title' === $key ) {
$value = strtoupper( $value );
}
return $value;
}
$key es la clave del atributo que se está escribiendo (por ejemplo, title), $product es el nodo SimpleXMLElement que se está construyendo, y $product_data es el array completo de datos del producto para esa fila. Devuelve el valor que deseas que se escriba para ese atributo.
adt_product_feed_xml_attribute_handling: Un filtro de cortocircuito que le permite encargarse de cómo se escribe un atributo en XML por completo, en lugar de simplemente cambiar su valor. Devuelva true para indicar al plugin que omita su propio manejo para ese atributo. Su callback es entonces responsable de escribir el nodo en $product mismo.
add_filter( 'adt_product_feed_xml_attribute_handling', 'my_custom_xml_attribute_handling', 10, 7 );
function my_custom_xml_attribute_handling( $handled, $product, $key, $value, $feed_config, $channel_attributes, $feed ) {
if ( 'custom_label' !== $key ) {
return $handled;
}
$product->addChild( 'g:custom_label_0', esc_html( $value ) );
return true;
}
adt_pfp_google_shopping_feed_channel_link y adt_pfp_feed_channel_link: Filtra la URL a nivel de canal escrita en la cabecera del feed. La primera se aplica a los feeds en la taxonomía de Google Shopping, donde establece <link> dentro de <channel>. La segunda se aplica a Yandex, Zap.co.il, Salidzini.lv y Pinterest RSS Board, y el elemento difiere según el formato: Yandex escribe <url> dentro de <shop>, Zap.co.il y Salidzini.lv escriben <link> en la raíz del documento, y Pinterest RSS Board escribe <link> dentro de <channel>. Ambas reciben la URL de inicio del sitio y el feed que se está generando, y ambas deben devolver una cadena de URL.
add_filter( 'adt_pfp_feed_channel_link', 'my_custom_feed_channel_link', 10, 2 );
function my_custom_feed_channel_link( $link, $feed ) {
return trailingslashit( $link ) . 'shop/';
}
Filtros de feeds CSV y TSV
adt_product_feed_csv_header: Filtra la cadena de la fila de encabezado justo antes de que se escriba como la primera línea de un feed CSV o TSV. Se activa una vez, en el primer lote de una ejecución de generación de feed.
add_filter( 'adt_product_feed_csv_header', 'my_custom_csv_header', 10, 3 );
function my_custom_csv_header( $header, $feed_attributes, $feed ) {
return str_replace( "'id'", "'sku'", $header );
}
adt_product_feed_csv_row_data: Filtra la matriz de valores de celda que componen una sola fila CSV o TSV, justo antes de que se escriba en el archivo del feed. Este es el filtro al que recurrir cuando necesite remodelar o recalcular un valor que solo se aplica a la salida CSV/TSV.
add_filter( 'adt_product_feed_csv_row_data', 'my_custom_csv_row_data', 10, 4 );
function my_custom_csv_row_data( $pieces_row, $old_attributes_config, $product_data, $feed ) {
foreach ( $pieces_row as $index => $value ) {
$pieces_row[ $index ] = trim( $value );
}
return $pieces_row;
}
$pieces_row es una matriz simple de los valores de celda de la fila en orden de columna, coincidiendo con la fila de encabezado de adt_product_feed_csv_header. Debido a que TSV comparte esta misma ruta de código, una devolución de llamada agregada aquí se ejecuta para ambos formatos. Si necesita un comportamiento específico del formato, verifique el formato de archivo del feed en $feed dentro de su devolución de llamada.
La corrección de lotes vacíos
Las versiones de Product Feed Pro anteriores a la 13.5.5 tenían un error por el cual un feed CSV con un lote vacío (una ejecución de generación que devolvía cero productos) podía activar la lógica de validación XML y abortar con un error de "xml no válido", a pesar de que el feed nunca pretendía generar XML. El lote vacío fallaba la comprobación de si hay productos de la rama CSV y caía en la rama XML, que luego intentaba escribir y validar el feed CSV como XML. La versión 13.5.5 restringió esa rama XML a los feeds cuyo formato es realmente XML, por lo que un lote CSV o TSV vacío ahora no escribe nada y ya no puede ser enrutado a través de la validación exclusiva para XML. Si estás en la versión 13.5.5 o posterior, esto no puede volver a ocurrir. Si estás en una versión anterior, actualiza el plugin antes de confiar en cualquiera de los filtros de este artículo.
Probando tus cambios de forma segura
- Usa primero un sitio de staging. Prueba los filtros a nivel de escritor en un lugar donde un feed defectuoso no afecte a tus listados de productos o cuentas de anuncios en vivo.
- Prueba con un lote pequeño. Filtra hasta una sola categoría, para que puedas inspeccionar la salida rápidamente en lugar de esperar una ejecución completa del catálogo.
- Regenera el feed manualmente desde la página Gestionar feeds después de añadir o cambiar un filtro, luego abre el archivo de feed sin procesar para confirmar que tu cambio aparece como se esperaba.
- Comprueba conflictos de filtros. Si más de un plugin o fragmento se engancha al mismo filtro, se ejecutan en orden de registro (o por prioridad, si has establecido una). Registra los valores entrantes y salientes en tu callback mientras pruebas para confirmar que nada anterior está sobrescribiendo tu cambio.
- Vuelve a probar después de una actualización del plugin. Los nombres de los hooks son parte de la API pública del plugin, y AdTribes evita renombrarlos sin previo aviso, pero sigue siendo una buena práctica confirmar que tus personalizaciones siguen funcionando después de actualizar.
Preguntas frecuentes
functions.php de tu tema activo si no estás usando un tema hijo. No edites los archivos de Product Feed Pro directamente, ya que cualquier cambio allí se pierde en la próxima actualización del plugin.adt_product_feed_attributes o adt_product_feed_custom_attributes, cubiertos en Hooks y filtros disponibles en Product Feed Pro. Una vez que un atributo está mapeado, los filtros de escritura de este artículo te permiten cambiar cómo se escribe su valor en el archivo.adt_product_feed_jsonl_product. Eso está fuera del alcance de este artículo, pero está listado en la referencia de hooks anterior.¿Necesitas más ayuda?
Si estás en Product Feed Elite o en otro plugin premium de AdTribes y necesitas ayuda con una personalización específica, abre un ticket de soporte y el equipo podrá indicarte el hook adecuado para tu caso de uso.
Si estás usando el plugin gratuito Product Feed Pro, haz tu pregunta en el foro de soporte de WordPress.org.

