L'onglet Mappage des champs couvre la plupart des besoins de personnalisation des flux, mais parfois vous devez changer quelque chose qu'il ne peut pas atteindre : encapsuler une valeur dans un nœud XML personnalisé, restructurer une colonne CSV qui n'est pas exposée comme un attribut, ou réécrire la ligne d'en-tête pour un système en aval. Product Feed Pro déclenche un ensemble de crochets de filtre à l'intérieur de ses rédacteurs XML, CSV et TSV pour cela précisément. Accrochez-vous à eux à partir d'un plugin personnalisé, et vous pouvez changer ce qui est réellement écrit dans le fichier de flux, sans toucher au cœur du plugin.
Cet article couvre les filtres au niveau du rédacteur et des exemples de code fonctionnels pour chacun d'eux. Pour le catalogue complet des hooks du plugin, y compris les hooks en dehors des rédacteurs de flux, consultez Hooks et filtres disponibles dans Product Feed Pro.
Prérequis
| Exigence | Détails |
|---|---|
| Plugin | Product Feed Pro, version 13.5.7 ou ultérieure |
| Où ajouter du code | Un plugin personnalisé (spécifique au site), ou le fichier functions.php de votre thème actif si vous n'utilisez pas de thème enfant |
| Compétences requises | À l'aise pour écrire du PHP et enregistrer des hooks de filtre WordPress |
Comment fonctionne le rédacteur de flux
Product Feed Pro utilise un rédacteur pour les flux XML et un rédacteur partagé pour les flux CSV et TSV (TSV utilise le même chemin de code que CSV, juste avec un caractère de tabulation comme délimiteur). Lors de la génération du flux, le plugin interroge un lot de produits, construit les données de chaque produit, puis transmet ces données au rédacteur pour le format du flux. Les filtres ci-dessous se situent dans cette étape d'écriture : ils s'exécutent une fois par produit, ou une fois par exécution de génération de flux pour les hooks d'en-tête et de lien de canal. Parce qu'ils se déclenchent pendant la sortie du rédacteur, les modifications apportées ici n'affectent que le format qu'ils ciblent. Un filtre sur le rédacteur XML n'affecte pas un flux CSV, et vice versa.
Filtres de flux XML
adt_product_feed_xml_attribute_value : Filtre la valeur d'un seul attribut XML juste avant qu'elle ne soit écrite dans le nœud XML du produit. Utilisez ceci pour modifier la sortie d'un attribut pour les flux XML sans toucher à aucun autre attribut ou format.
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 est la clé d'attribut en cours d'écriture (par exemple title), $product est le nœud SimpleXMLElement en cours de construction, et $product_data est le tableau complet des données du produit pour cette ligne. Retournez la valeur que vous souhaitez écrire pour cet attribut.
adt_product_feed_xml_attribute_handling : Un filtre de court-circuit qui vous permet de prendre en charge entièrement la manière dont un attribut est écrit en XML, au lieu de simplement modifier sa valeur. Retournez true pour indiquer au plugin de sauter sa propre gestion pour cet attribut. Votre rappel est alors responsable de l'écriture du nœud sur $product lui-même.
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 et adt_pfp_feed_channel_link : Filtrez l'URL au niveau du canal écrite dans l'en-tête du flux. Le premier s'applique aux flux sur la taxonomie Google Shopping, où il définit <link> à l'intérieur de <channel>. Le second s'applique à Yandex, Zap.co.il, Salidzini.lv et Pinterest RSS Board, et l'élément diffère selon le format : Yandex écrit <url> à l'intérieur de <shop>, Zap.co.il et Salidzini.lv écrivent <link> à la racine du document, et Pinterest RSS Board écrit <link> à l'intérieur de <channel>. Les deux reçoivent l'URL d'accueil du site et le flux en cours de génération, et les deux doivent retourner une chaîne d'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/';
}
Filtres de flux CSV et TSV
adt_product_feed_csv_header : Filtre la chaîne de la ligne d'en-tête juste avant qu'elle ne soit écrite comme première ligne d'un flux CSV ou TSV. Se déclenche une fois, sur le premier lot d'une exécution de génération de flux.
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 : Filtre le tableau des valeurs de cellules qui composent une seule ligne CSV ou TSV, juste avant qu'elle ne soit écrite dans le fichier de flux. C'est le filtre à utiliser lorsque vous avez besoin de remodeler ou de recalculer une valeur qui ne s'applique qu'à la sortie 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 est un tableau simple des valeurs de cellules de la ligne dans l'ordre des colonnes, correspondant à la ligne d'en-tête de adt_product_feed_csv_header. Comme TSV partage ce même chemin de code, un rappel ajouté ici s'exécute pour les deux formats. Si vous avez besoin d'un comportement spécifique au format, vérifiez le format de fichier du flux sur $feed à l'intérieur de votre rappel.
La correction du lot vide
Les versions de Product Feed Pro antérieures à la version 13.5.5 présentaient un bug où un flux CSV avec un lot vide (une exécution de génération qui ne renvoyait aucun produit) pouvait déclencher la logique de validation XML et s'arrêter avec une erreur « XML non valide », même si le flux n'était pas censé produire de XML. Le lot vide échouait à la vérification « has-products » de la branche CSV et tombait dans la branche XML, qui tentait ensuite d'écrire et de valider le flux CSV en tant que XML. La version 13.5.5 a restreint cette branche XML aux flux dont le format est réellement XML, de sorte qu'un lot CSV ou TSV vide n'écrit plus rien et ne peut plus être acheminé via la validation XML uniquement. Si vous êtes sur la version 13.5.5 ou une version ultérieure, cela ne peut pas se reproduire. Si vous êtes sur une version antérieure, mettez à jour le plugin avant de vous fier aux filtres de cet article.
Tester vos modifications en toute sécurité
- Utilisez d'abord un site de staging. Testez les filtres de niveau écrivain dans un endroit où un flux défectueux n'affectera pas vos listes de produits ou vos comptes publicitaires en direct.
- Testez avec un petit lot. Filtrez sur une seule catégorie, afin de pouvoir inspecter la sortie rapidement au lieu d'attendre une exécution complète du catalogue.
- Régénérez le flux manuellement depuis la page Gérer les flux après avoir ajouté ou modifié un filtre, puis ouvrez le fichier de flux brut pour confirmer que votre modification apparaît comme prévu.
- Vérifiez les conflits de filtres. Si plusieurs plugins ou extraits de code s'accrochent au même filtre, ils s'exécutent dans l'ordre d'enregistrement (ou par priorité, si vous en avez défini une). Enregistrez les valeurs entrantes et sortantes dans votre rappel pendant les tests pour confirmer que rien en amont ne surcharge votre modification.
- Retestez après une mise à jour du plugin. Les noms des hooks font partie de l'API publique du plugin, et AdTribes évite de les renommer sans préavis, mais il est toujours bon de confirmer que vos personnalisations fonctionnent toujours après une mise à jour.
FAQ
functions.php de votre thème actif si vous n'utilisez pas de thème enfant. Ne modifiez pas directement les fichiers de Product Feed Pro, car toute modification y sera perdue lors de la prochaine mise à jour du plugin.adt_product_feed_attributes ou adt_product_feed_custom_attributes, abordés dans Hooks et filtres disponibles dans Product Feed Pro. Une fois qu'un attribut est mappé, les filtres d'écriture de cet article vous permettent de modifier la façon dont sa valeur est écrite dans le fichier.adt_product_feed_jsonl_product. Cela sort du cadre de cet article, mais il est répertorié dans la référence des hooks ci-dessus.Besoin de plus d'aide ?
Si vous utilisez Product Feed Elite ou un autre plugin premium AdTribes et que vous avez besoin d’aide pour une personnalisation spécifique, ouvrez un ticket de support, et l’équipe pourra vous indiquer le hook approprié à votre cas d’utilisation.
Si vous utilisez le plugin gratuit Product Feed Pro, posez votre question sur le forum de support de WordPress.org.

