Der Tab „Feldzuordnung“ deckt die meisten Anforderungen zur Feed-Anpassung ab, aber manchmal müssen Sie etwas ändern, das er nicht erreichen kann: einen Wert in einen benutzerdefinierten XML-Knoten einschließen, eine CSV-Spalte umstrukturieren, die nicht als Attribut verfügbar ist, oder die Kopfzeile für ein nachgelagertes System umschreiben. Product Feed Pro löst genau dafür eine Reihe von Filter-Hooks innerhalb seiner XML-, CSV- und TSV-Writer aus. Haken Sie sich über ein benutzerdefiniertes Plugin ein, und Sie können ändern, was tatsächlich in die Feed-Datei geschrieben wird, ohne den Plugin-Kern zu berühren.
Dieser Artikel behandelt die Writer-Level-Filter und funktionierende Codebeispiele für jeden einzelnen. Die vollständige Hook-Liste des Plugins, einschließlich Hooks außerhalb der Feed-Writer, finden Sie unter Verfügbare Hooks und Filter in Product Feed Pro.
Voraussetzungen
| Voraussetzung | Details |
|---|---|
| Plugin | Product Feed Pro, Version 13.5.7 oder neuer |
| Wo Code hinzugefügt werden soll | Ein benutzerdefiniertes (websitespezifisches) Plugin oder die functions.php-Datei Ihres aktiven Themes, wenn Sie kein Child-Theme verwenden |
| Benötigte Kenntnisse | Vertrautheit mit dem Schreiben von PHP und der Registrierung von WordPress-Filter-Hooks |
Wie der Feed-Writer funktioniert
Product Feed Pro verwendet einen Writer für XML-Feeds und einen gemeinsamen Writer für CSV- und TSV-Feeds (TSV verwendet denselben Code-Pfad wie CSV, nur mit einem Tabulatorzeichen als Trennzeichen). Während der Feed-Generierung fragt das Plugin einen Stapel von Produkten ab, erstellt die Daten jedes Produkts und übergibt diese Daten dann an den Writer für das Format des Feeds. Die folgenden Filter befinden sich innerhalb dieses Schreibschritts: Sie werden einmal pro Produkt ausgeführt, oder einmal pro Feed-Generierungslauf für die Header- und Channel-Link-Hooks. Da sie während der Writer-Ausgabe ausgelöst werden, gelten hier vorgenommene Änderungen nur für das Format, das sie ansprechen. Ein Filter im XML-Writer wirkt sich nicht auf einen CSV-Feed aus, und umgekehrt.
XML-Feed-Filter
adt_product_feed_xml_attribute_value: Filtert den Wert eines einzelnen XML-Attributs direkt bevor es in den XML-Knoten des Produkts geschrieben wird. Verwenden Sie dies, um die Ausgabe eines Attributs für XML-Feeds zu ändern, ohne andere Attribute oder Formate zu berühren.
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 ist der geschriebene Attributschlüssel (z. B. title), $product ist der erstellte SimpleXMLElement-Knoten und $product_data ist das vollständige Produktdaten-Array für diese Zeile. Geben Sie den Wert zurück, der für dieses Attribut geschrieben werden soll.
adt_product_feed_xml_attribute_handling: Ein Kurzschlussfilter, mit dem Sie die vollständige Schreibweise eines Attributs in XML übernehmen können, anstatt nur seinen Wert zu ändern. Geben Sie true zurück, um dem Plugin mitzuteilen, dass es die eigene Handhabung für dieses Attribut überspringen soll. Ihr Callback ist dann dafür verantwortlich, den Knoten selbst auf $product zu schreiben.
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 und adt_pfp_feed_channel_link: Filtern Sie die URL auf Kanal-Ebene, die in den Header des Feeds geschrieben wird. Die erste gilt für Feeds auf der Google Shopping-Taxonomie, wo sie <link> innerhalb von <channel> setzt. Die zweite gilt für Yandex, Zap.co.il, Salidzini.lv und Pinterest RSS Board, und das Element unterscheidet sich je nach Format: Yandex schreibt <url> innerhalb von <shop>, Zap.co.il und Salidzini.lv schreiben <link> am Dokumentenstamm, und Pinterest RSS Board schreibt <link> innerhalb von <channel>. Beide erhalten die Home-URL der Website und den generierten Feed, und beide müssen eine URL-Zeichenkette zurückgeben.
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- und TSV-Feed-Filter
adt_product_feed_csv_header: Filtert die Header-Zeichenkette direkt, bevor sie als erste Zeile eines CSV- oder TSV-Feeds geschrieben wird. Löst einmal aus, bei der ersten Charge eines Feed-Generierungslaufs.
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 das Array von Zellwerten, aus denen eine einzelne CSV- oder TSV-Zeile besteht, direkt bevor sie in die Feed-Datei geschrieben wird. Dies ist der Filter, den Sie verwenden sollten, wenn Sie einen Wert umgestalten oder neu berechnen müssen, der nur für die CSV/TSV-Ausgabe gilt.
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 ist ein einfaches Array der Zellwerte der Zeile in Spaltenreihenfolge, passend zur Header-Zeile von adt_product_feed_csv_header. Da TSV denselben Code-Pfad teilt, läuft ein hier hinzugefügter Callback für beide Formate. Wenn Sie ein formatspezifisches Verhalten benötigen, überprüfen Sie das Dateiformat des Feeds in $feed innerhalb Ihres Callbacks.
Die Leere-Charge-Korrektur
Versionen von Product Feed Pro vor 13.5.5 hatten einen Fehler, bei dem ein CSV-Feed mit einem leeren Batch (ein Generierungslauf, der null Produkte zurückgab) die XML-Validierungslogik treffen und mit einem „kein gültiges XML“-Fehler abbrechen konnte, obwohl der Feed niemals XML erzeugen sollte. Der leere Batch schlug die has-products-Prüfung des CSV-Zweigs fehl und fiel in den XML-Zweig, der dann versuchte, den CSV-Feed als XML zu schreiben und zu validieren. Version 13.5.5 beschränkte diesen XML-Zweig auf Feeds, deren Format tatsächlich XML ist, sodass ein leerer CSV- oder TSV-Batch nun nichts schreibt und nicht mehr durch eine reine XML-Validierung geleitet werden kann. Wenn Sie Version 13.5.5 oder neuer verwenden, kann dies nicht erneut auftreten. Wenn Sie eine frühere Version verwenden, aktualisieren Sie das Plugin, bevor Sie sich auf die Filter in diesem Artikel verlassen.
Testen Sie Ihre Änderungen sicher
- Verwenden Sie zuerst eine Staging-Site. Testen Sie Writer-Level-Filter an einem Ort, an dem ein fehlerhafter Feed Ihre Live-Produktangebote oder Anzeigenkonten nicht beeinträchtigt.
- Testen Sie mit einem kleinen Batch. Filtern Sie auf eine einzelne Kategorie, damit Sie die Ausgabe schnell überprüfen können, anstatt auf einen vollständigen Katalogdurchlauf zu warten.
- Generieren Sie den Feed manuell neu auf der Seite „Feeds verwalten“, nachdem Sie einen Filter hinzugefügt oder geändert haben. Öffnen Sie dann die rohe Feed-Datei, um zu bestätigen, dass Ihre Änderung wie erwartet angezeigt wird.
- Prüfen Sie auf Filterkonflikte. Wenn mehr als ein Plugin oder Snippet denselben Filter verwendet, werden sie in der Registrierungsreihenfolge (oder nach Priorität, falls Sie eine festgelegt haben) ausgeführt. Protokollieren Sie die eingehenden und ausgehenden Werte in Ihrer Callback-Funktion während des Testens, um zu bestätigen, dass nichts im Upstream Ihre Änderung überschreibt.
- Testen Sie nach einem Plugin-Update erneut. Hook-Namen sind Teil der öffentlichen API des Plugins, und AdTribes vermeidet es, sie ohne Vorankündigung umzubenennen. Dennoch ist es eine gute Praxis, zu bestätigen, dass Ihre Anpassungen nach dem Update weiterhin funktionieren.
FAQ
functions.php Ihres aktiven Themes, wenn Sie kein Child-Theme verwenden. Bearbeiten Sie nicht die Dateien von Product Feed Pro direkt, da alle dort vorgenommenen Änderungen beim nächsten Plugin-Update verloren gehen.adt_product_feed_attributes oder adt_product_feed_custom_attributes, die in Verfügbare Hooks und Filter in Product Feed Pro behandelt werden. Sobald ein Attribut zugeordnet ist, können Sie mit den Writer-Filtern in diesem Artikel ändern, wie sein Wert in die Datei geschrieben wird.adt_product_feed_jsonl_product. Dies liegt außerhalb des Rahmens dieses Artikels, ist aber im Hooks-Referenz oben aufgeführt.Benötigen Sie weitere Hilfe?
Wenn Sie Product Feed Elite oder ein anderes Premium-AdTribes-Plugin verwenden und Hilfe bei einer bestimmten Anpassung benötigen, öffnen Sie ein Support-Ticket, und das Team kann Sie auf den richtigen Haken für Ihren Anwendungsfall hinweisen.
Wenn Sie das kostenlose Product Feed Pro-Plugin verwenden, stellen Sie Ihre Frage im WordPress.org-Supportforum.

