Zacznij
Jak modyfikować dane wyjściowe generatora plików za pomocą filtrów - AdTribes
  1. Strona główna
  2. Baza wiedzy
  3. Personalizacja
  4. Jak modyfikować dane wyjściowe programu do generowania plików za pomocą filtrów

Jak modyfikować dane wyjściowe programu do generowania plików za pomocą filtrów

Jest to dokumentacja dla programistów. Zakłada się, że czujesz się komfortowo z dodawaniem kodu za pomocą niestandardowej wtyczki lub pliku functions.php swojego motywu. Jeśli dopiero zaczynasz przygodę z hakami WordPress, najpierw przeczytaj Podręcznik wtyczek WordPress dotyczący haków.

Zakładka Mapowanie Pól obejmuje większość potrzeb związanych z dostosowywaniem plików, ale czasami trzeba zmienić coś, czego nie można osiągnąć: opakować wartość w niestandardowy węzeł XML, przekształcić kolumnę CSV, która nie jest udostępniana jako atrybut, lub przepisać wiersz nagłówka dla systemu docelowego. Product Feed Pro uruchamia zestaw haków filtrujących w swoich generatorach XML, CSV i TSV właśnie w tym celu. Użyj ich z niestandardowej wtyczki, a będziesz mógł zmienić to, co faktycznie zostanie zapisane w pliku, bez dotykania rdzenia wtyczki.

Ten artykuł omawia filtry na poziomie generatora i zawiera przykłady kodu dla każdego z nich. Pełny katalog haków wtyczki, w tym haki poza generatorami plików, można znaleźć w Dostępne haki i filtry w Product Feed Pro.

Są to filtry PHP, a nie to samo co zakładka Filtry wtyczki. Zakładka Filtry pozwala na uwzględnianie lub wykluczanie produktów z pliku za pomocą warunków w interfejsie użytkownika. W sprawie tej funkcji zobacz Jak tworzyć filtry dla swojego pliku produktów.

Wymagania wstępne

WymaganieSzczegóły
WtyczkaProduct Feed Pro, wersja 13.5.7 lub nowsza
Gdzie dodać kodNiestandardowa (specyficzna dla witryny) wtyczka lub plik functions.php aktywnego motywu, jeśli nie używasz motywu potomnego
Wymagane umiejętnościKomfortowe pisanie kodu PHP i rejestrowanie haków filtrujących WordPress

Jak działa generator plików

Product Feed Pro używa jednego generatora dla plików XML i wspólnego generatora dla plików CSV i TSV (TSV korzysta z tej samej ścieżki kodu co CSV, tylko z tabulatorem jako separatorem). Podczas generowania pliku wtyczka pobiera partię produktów, buduje dane każdego produktu, a następnie przekazuje te dane do generatora w celu uzyskania formatu pliku. Poniższe filtry znajdują się w tym kroku zapisu: uruchamiane są raz na produkt lub raz na przebieg generowania pliku dla haków nagłówka i kanału. Ponieważ są uruchamiane podczas generowania danych wyjściowych przez generator, wprowadzone tutaj zmiany dotyczą tylko formatu, który jest celem. Filtr w generatorze XML nie wpływa na plik CSV i odwrotnie.

Filtry plików XML

adt_product_feed_xml_attribute_value: Filtruje wartość pojedynczego atrybutu XML tuż przed zapisaniem jej w węźle XML produktu. Użyj tego, aby zmienić dane wyjściowe jednego atrybutu dla plików XML, nie dotykając żadnego innego atrybutu ani formatu.

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 to klucz atrybutu, który jest zapisywany (na przykład title), $product to budowany węzeł SimpleXMLElement, a $product_data to pełna tablica danych produktu dla tego wiersza. Zwróć wartość, która ma zostać zapisana dla tego atrybutu.

adt_product_feed_xml_attribute_handling: Krótkie obejście filtra, które pozwala całkowicie przejąć sposób zapisu jednego atrybutu w XML, zamiast tylko zmieniać jego wartość. Zwróć true, aby poinformować wtyczkę o pominięciu własnego przetwarzania tego atrybutu. Twoja funkcja zwrotna jest następnie odpowiedzialna za zapis węzła w samym $product.

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;
}

Jeśli zwrócisz true z adt_product_feed_xml_attribute_handling, ale nic nie zapiszesz w $product, ten atrybut zostanie po cichu pominięty w kanale. Zwróć true dopiero po tym, jak Twoja funkcja zwrotna faktycznie doda węzeł.

adt_pfp_google_shopping_feed_channel_link i adt_pfp_feed_channel_link: Filtruj adres URL na poziomie kanału zapisywany w nagłówku kanału. Pierwszy dotyczy kanałów w taksonomii Google Shopping, gdzie ustawia <link> wewnątrz <channel>. Drugi dotyczy Yandex, Zap.co.il, Salidzini.lv i Pinterest RSS Board, a element różni się w zależności od formatu: Yandex zapisuje <url> wewnątrz <shop>, Zap.co.il i Salidzini.lv zapisują <link> w głównym katalogu dokumentu, a Pinterest RSS Board zapisuje <link> wewnątrz <channel>. Oba otrzymują adres URL strony głównej i generowany kanał, i oba muszą zwrócić ciąg znaków adresu 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/';
}

Filtry kanałów CSV i TSV

adt_product_feed_csv_header: Filtruje ciąg znaków wiersza nagłówka tuż przed jego zapisaniem jako pierwsza linia kanału CSV lub TSV. Uruchamia się raz, podczas pierwszej partii uruchomienia generowania kanału.

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: Filtruje tablicę wartości komórek tworzących pojedynczy wiersz CSV lub TSV, tuż przed jego zapisaniem do pliku kanału. Jest to filtr, do którego należy sięgnąć, gdy trzeba przekształcić lub przeliczyć wartość, która dotyczy tylko wyjścia 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 to zwykła tablica wartości komórek wiersza w kolejności kolumn, pasująca do wiersza nagłówka z adt_product_feed_csv_header. Ponieważ TSV korzysta z tej samej ścieżki kodu, funkcja zwrotna dodana tutaj działa dla obu formatów. Jeśli potrzebujesz zachowania specyficznego dla formatu, sprawdź format pliku kanału w $feed wewnątrz swojej funkcji zwrotnej.

Poprawka pustej partii

Wersje Product Feed Pro przed 13.5.5 miały błąd, w którym plik CSV z pustym zestawem (uruchomienie generowania, które zwróciło zero produktów) mógł trafić do logiki walidacji XML i zakończyć się błędem „nieprawidłowy plik XML”, mimo że plik nigdy nie miał generować XML. Pusty zestaw nie przeszedł sprawdzenia `has-products` w gałęzi CSV i trafił do gałęzi XML, która następnie próbowała zapisać i zweryfikować plik CSV jako XML. Wersja 13.5.5 ograniczyła tę gałąź XML do plików, których formatem jest faktycznie XML, więc pusty zestaw CSV lub TSV teraz nic nie zapisuje i nie może być już kierowany przez walidację tylko dla XML. Jeśli używasz wersji 13.5.5 lub nowszej, to się nie powtórzy. Jeśli używasz wcześniejszej wersji, zaktualizuj wtyczkę przed skorzystaniem z jakichkolwiek filtrów w tym artykule.

Bezpieczne testowanie zmian

  • Najpierw użyj strony stagingowej. Testuj filtry na poziomie zapisywania w miejscu, gdzie uszkodzony plik nie wpłynie na Twoje listy produktów ani konta reklamowe.
  • Testuj z małym zestawem. Ogranicz filtrowanie do jednej kategorii, aby szybko sprawdzić wynik, zamiast czekać na pełne uruchomienie katalogu.
  • Ręcznie wygeneruj plik ponownie ze strony Zarządzaj plikami po dodaniu lub zmianie filtra, a następnie otwórz surowy plik, aby potwierdzić, że zmiana pojawiła się zgodnie z oczekiwaniami.
  • Sprawdź konflikty filtrów. Jeśli więcej niż jedna wtyczka lub fragment kodu podłącza się do tego samego filtra, działają one w kolejności rejestracji (lub według priorytetu, jeśli go ustawiłeś). Zaloguj wartości przychodzące i wychodzące w swojej funkcji zwrotnej podczas testowania, aby potwierdzić, że nic nadrzędnego nie nadpisuje Twojej zmiany.
  • Przetestuj ponownie po aktualizacji wtyczki. Nazwy haków są częścią publicznego API wtyczki, a AdTribes unika ich zmiany bez powiadomienia, ale nadal jest dobrą praktyką potwierdzenie, że Twoje dostosowania nadal działają po aktualizacji.

FAQ

Gdzie mam dodać ten kod?
Dodaj go do niestandardowej (specyficznej dla witryny) wtyczki lub do pliku functions.php Twojego aktywnego motywu, jeśli nie używasz motywu potomnego. Nie edytuj bezpośrednio plików Product Feed Pro, ponieważ wszelkie zmiany tam zostaną utracone przy następnej aktualizacji wtyczki.
Czy mój filtr przetrwa aktualizację wtyczki?
Tak, o ile dodasz go za pośrednictwem niestandardowej wtyczki lub swojego motywu, i o ile nazwa haka pozostanie taka sama. AdTribes traktuje nazwy haków jako część publicznego API wtyczki. Mimo to, testuj na stagingu po każdej aktualizacji.
Czy mogę w ten sposób dodać zupełnie nowy atrybut do pliku?
Nie bezpośrednio za pomocą tych filtrów zapisywania. Aby dodać nowy atrybut dostępny do mapowania pól, użyj adt_product_feed_attributes lub adt_product_feed_custom_attributes, omówionych w Dostępne haki i filtry w Product Feed Pro. Gdy atrybut zostanie zmapowany, filtry zapisywania w tym artykule pozwalają zmienić sposób zapisu jego wartości do pliku.
Czy to działa dla plików JSONL?
Nie. Pliki JSONL i JSONL.GZ używają oddzielnego zapisywania z własnym filtrem, adt_product_feed_jsonl_product. Jest to poza zakresem tego artykułu, ale jest wymienione w odwołaniu do haków powyżej.

Potrzebujesz więcej pomocy?

Jeśli korzystasz z wtyczki Product Feed Elite lub innej wtyczki premium AdTribes i potrzebujesz pomocy z konkretną personalizacją, otwórz zgłoszenie wsparcia, a zespół wskaże Ci odpowiedni haczyk do Twojego przypadku użycia.

Jeśli korzystasz z darmowej wtyczki Product Feed Pro, zadaj pytanie na forum wsparcia WordPress.org.

Czy ten artykuł był pomocny?

Powiązane artykuły

Dokończ zakup
AdTribes WooCommerce Product Feed

Najlepsza wtyczka WooCommerce do kanałów produktów

  • AdTribes Pty Ltd
    ABN: 40 675 636 816
Produkt
Zasoby i informacje
Witryny partnerskie
Rymera