Commencer
Comment modifier la sortie du rédacteur de flux avec des filtres - AdTribes
  1. Accueil
  2. Base de connaissances
  3. Personnalisation
  4. Comment modifier la sortie du rédacteur de flux avec des filtres

Comment modifier la sortie du rédacteur de flux avec des filtres

Ceci est une référence pour les développeurs. Elle suppose que vous êtes à l'aise pour ajouter du code via un plugin personnalisé ou le fichier functions.php de votre thème. Si vous débutez avec les hooks WordPress, consultez d'abord le manuel des plugins WordPress sur les hooks.

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.

Ce sont des hooks de filtre PHP, pas la même chose que l'onglet Filtres du plugin. L'onglet Filtres vous permet d'inclure ou d'exclure des produits d'un flux en utilisant des conditions dans l'interface utilisateur. Pour cette fonctionnalité, consultez Comment créer des filtres pour votre flux de produits.

Prérequis

ExigenceDétails
PluginProduct Feed Pro, version 13.5.7 ou ultérieure
Où ajouter du codeUn 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;
}

Si vous retournez true de adt_product_feed_xml_attribute_handling mais que vous n’écrivez rien sur $product, cet attribut est silencieusement supprimé du flux. Retournez true uniquement une fois que votre rappel a effectivement ajouté le nœud.

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

Où dois-je ajouter ce code ?
Ajoutez-le à un plugin personnalisé (spécifique au site), ou au fichier 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.
Mon filtre survivra-t-il à une mise à jour du plugin ?
Oui, tant que vous l'ajoutez via un plugin personnalisé ou votre thème, et tant que le nom du hook reste le même. AdTribes considère les noms des hooks comme faisant partie de l'API publique du plugin. Néanmoins, testez sur staging après toute mise à jour.
Puis-je ajouter un tout nouvel attribut au flux de cette manière ?
Pas directement avec ces filtres d'écriture. Pour ajouter un nouvel attribut disponible pour le mappage de champs, utilisez 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.
Cela fonctionne-t-il pour les flux JSONL ?
Non. Les flux JSONL et JSONL.GZ utilisent un écrivain séparé avec leur propre filtre, 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.

Cet article vous a-t-il été utile ?

Articles connexes

Finaliser votre achat
Flux de produits WooCommerce AdTribes

Le meilleur plugin de flux de produits WooCommerce

  • AdTribes Pty Ltd
    ABN : 40 675 636 816
Produit
Ressources et informations
Sites partenaires
Rymera