Het tabblad Field Mapping dekt de meeste behoeften aan feedaanpassing, maar soms moet u iets veranderen wat het niet kan bereiken: een waarde verpakken in een aangepaste XML-node, een CSV-kolom herstructureren die niet als attribuut wordt weergegeven, of de headerrij herschrijven voor een downstream systeem. Product Feed Pro activeert een reeks filter hooks binnen zijn XML-, CSV- en TSV-writers precies hiervoor. Haak hierop in vanuit een aangepaste plugin, en u kunt wijzigen wat er daadwerkelijk in het feedbestand wordt geschreven, zonder de plugin-kern aan te raken.
Dit artikel behandelt de writer-level filters en werkende codevoorbeelden voor elk ervan. Voor de volledige hook-catalogus van de plugin, inclusief hooks buiten de feed-writers, zie Beschikbare hooks en filters in Product Feed Pro.
Vereisten
| Vereiste | Details |
|---|---|
| Plugin | Product Feed Pro, versie 13.5.7 of later |
| Waar code toe te voegen | Een aangepaste (site-specifieke) plugin, of de functions.php van uw actieve thema als u geen child theme gebruikt |
| Benodigde vaardigheden | Comfortabel met het schrijven van PHP en het registreren van WordPress filter hooks |
Hoe de feed-schrijver werkt
Product Feed Pro gebruikt één writer voor XML-feeds en een gedeelde writer voor CSV- en TSV-feeds (TSV gebruikt hetzelfde code-pad als CSV, alleen met een tab-teken als scheidingsteken). Tijdens het genereren van de feed, vraagt de plugin een batch producten op, bouwt de gegevens van elk product op, en geeft die gegevens vervolgens door aan de writer voor het formaat van de feed. De onderstaande filters bevinden zich binnen die schrijfstap: ze worden één keer per product uitgevoerd, of één keer per feedgeneratieronde voor de header- en channel-link hooks. Omdat ze worden geactiveerd tijdens de writer-uitvoer, zijn wijzigingen die hier worden aangebracht alleen van toepassing op het doelformaat. Een filter op de XML-writer heeft geen invloed op een CSV-feed, en andersom geldt hetzelfde.
XML-feedfilters
adt_product_feed_xml_attribute_value: Filtert de waarde van een enkel XML-attribuut vlak voordat het in de XML-node van het product wordt geschreven. Gebruik dit om de uitvoer van één attribuut voor XML-feeds te wijzigen zonder andere attributen of formaten aan te raken.
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 is de attribuutsleutel die wordt geschreven (bijvoorbeeld title), $product is de SimpleXMLElement node die wordt gebouwd, en $product_data is de volledige productgegevensarray voor die rij. Geef de waarde terug die u voor dat attribuut wilt laten schrijven.
adt_product_feed_xml_attribute_handling: Een short-circuit filter waarmee u kunt bepalen hoe een attribuut volledig naar XML wordt geschreven, in plaats van alleen de waarde ervan te wijzigen. Retourneer true om de plugin te vertellen zijn eigen afhandeling voor dat attribuut over te slaan. Uw callback is vervolgens verantwoordelijk voor het schrijven van de node naar $product zelf.
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 en adt_pfp_feed_channel_link: Filter de URL op kanaalniveau die in de header van de feed wordt geschreven. De eerste is van toepassing op feeds op de Google Shopping-taxonomie, waar deze <link> binnen <channel> instelt. De tweede is van toepassing op Yandex, Zap.co.il, Salidzini.lv en Pinterest RSS Board, en het element verschilt per indeling: Yandex schrijft <url> binnen <shop>, Zap.co.il en Salidzini.lv schrijven <link> op de hoofdmap van het document, en Pinterest RSS Board schrijft <link> binnen <channel>. Beide ontvangen de home-URL van de site en de feed die wordt gegenereerd, en beide moeten een URL-string retourneren.
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/';
}
CSV- en TSV-feedfilters
adt_product_feed_csv_header: Filtert de headerrij-string vlak voordat deze als eerste regel van een CSV- of TSV-feed wordt geschreven. Wordt één keer geactiveerd, op de eerste batch van een feedgeneratierun.
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: Filtert de array met celwaarden die een enkele CSV- of TSV-rij vormen, vlak voordat deze naar het feedbestand wordt geschreven. Dit is het filter waar u naar moet grijpen wanneer u een waarde moet hervormen of herberekenen die alleen van toepassing is op CSV/TSV-uitvoer.
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 is een platte array van de celwaarden van de rij in kolomvolgorde, die overeenkomt met de headerrij van adt_product_feed_csv_header. Omdat TSV hetzelfde code-pad deelt, wordt een callback die hier is toegevoegd uitgevoerd voor beide indelingen. Als u indeling-specifiek gedrag nodig heeft, controleer dan de bestandsindeling van de feed op $feed binnen uw callback.
De lege-batch fix
Versies van Product Feed Pro vóór 13.5.5 hadden een bug waarbij een CSV-feed met een lege batch (een generatieronde die nul producten opleverde) de XML-validatielogica kon raken en kon worden afgebroken met een "geen geldige XML"-fout, ook al was de feed nooit bedoeld om XML te produceren. De lege batch faalde de has-products check van de CSV-tak en viel door naar de XML-tak, die vervolgens probeerde de CSV-feed als XML te schrijven en te valideren. Versie 13.5.5 beperkte die XML-tak tot feeds waarvan het formaat daadwerkelijk XML is, dus een lege CSV- of TSV-batch schrijft nu niets en kan niet langer door XML-only validatie worden gerouteerd. Als je op 13.5.5 of hoger zit, kan dit niet opnieuw gebeuren. Als je op een eerdere versie zit, update dan de plugin voordat je vertrouwt op de filters in dit artikel.
Test je wijzigingen veilig
- Gebruik eerst een staging-site. Test writer-level filters ergens waar een defecte feed je live productvermeldingen of advertentieaccounts niet beïnvloedt.
- Test met een kleine batch. Filter naar een enkele categorie, zodat je de uitvoer snel kunt inspecteren in plaats van te wachten op een volledige catalogusrun.
- Genereer de feed handmatig opnieuw vanaf de pagina Beheren feeds nadat je een filter hebt toegevoegd of gewijzigd, open vervolgens het ruwe feedbestand om te bevestigen dat je wijziging zoals verwacht verschijnt.
- Controleer op filterconflicten. Als meer dan één plugin of snippet dezelfde filter haakt, worden ze uitgevoerd in registratievolgorde (of op prioriteit, als je die hebt ingesteld). Log de inkomende en uitgaande waarden in je callback tijdens het testen om te bevestigen dat niets upstream je wijziging overschrijft.
- Her-test na een plugin-update. Haaknamen maken deel uit van de publieke API van de plugin, en AdTribes vermijdt het hernoemen ervan zonder kennisgeving, maar het is nog steeds een goede gewoonte om te bevestigen dat je aanpassingen nog steeds werken na het updaten.
Veelgestelde vragen
functions.php van je actieve thema als je geen child theme gebruikt. Bewerk de bestanden van Product Feed Pro niet rechtstreeks, aangezien wijzigingen daar verloren gaan bij de volgende plugin-update.adt_product_feed_attributes of adt_product_feed_custom_attributes, behandeld in Beschikbare hooks en filters in Product Feed Pro. Zodra een attribuut is gemapt, laten de writer filters in dit artikel je toe om te wijzigen hoe de waarde ervan in het bestand wordt geschreven.adt_product_feed_jsonl_product. Dat valt buiten het bestek van dit artikel, maar het staat vermeld in de hooks-referentie hierboven.Meer hulp nodig?
Als je Product Feed Elite of een andere premium AdTribes-plugin gebruikt en hulp nodig hebt met een specifieke aanpassing, open dan een supportticket, en het team kan je naar de juiste hook voor jouw gebruikssituatie wijzen.
Als u de gratis Product Feed Pro-plugin gebruikt, stel uw vraag dan op het WordPress.org-ondersteuningsforum.

