Inizia
Come modificare l'output del feed writer con i filtri - AdTribes
  1. Casa
  2. Knowledge Base
  3. Personalizzazione
  4. Come modificare l'output del feed writer con i filtri

Come modificare l'output del feed writer con i filtri

Questo è un riferimento per sviluppatori. Si presume che tu sia a tuo agio nell'aggiungere codice tramite un plugin personalizzato o il file functions.php del tuo tema. Se sei nuovo ai ganci di WordPress, leggi prima il Manuale dei plugin di WordPress sui ganci.

La scheda Field Mapping copre la maggior parte delle esigenze di personalizzazione del feed, ma a volte è necessario modificare qualcosa che non può raggiungere: racchiudere un valore in un nodo XML personalizzato, ristrutturare una colonna CSV che non è esposta come attributo o riscrivere la riga di intestazione per un sistema downstream. Product Feed Pro attiva una serie di hook di filtro all'interno dei suoi writer XML, CSV e TSV proprio per questo. Agganciati ad essi da un plugin personalizzato e puoi cambiare ciò che viene effettivamente scritto nel file del feed, senza toccare il core del plugin.

Questo articolo copre i filtri a livello di writer e fornisce esempi di codice funzionanti per ciascuno. Per il catalogo completo degli hook del plugin, inclusi gli hook al di fuori dei writer di feed, vedere Hook e filtri disponibili in Product Feed Pro.

Questi sono hook di filtro PHP, non la stessa cosa della scheda Filtri del plugin. La scheda Filtri consente di includere o escludere prodotti da un feed utilizzando condizioni nell'interfaccia utente. Per questa funzionalità, vedere Come creare filtri per il tuo feed di prodotti.

Prerequisiti

RequisitoDettagli
PluginProduct Feed Pro, versione 13.5.7 o successiva
Dove aggiungere il codiceUn plugin personalizzato (specifico del sito) o il file functions.php del tuo tema attivo se non stai usando un tema child
Competenze necessarieCompetenza nella scrittura di PHP e nella registrazione di hook di filtro di WordPress

Come funziona il feed writer

Product Feed Pro utilizza un writer per i feed XML e un writer condiviso per i feed CSV e TSV (TSV utilizza lo stesso percorso di codice di CSV, solo con un carattere di tabulazione come delimitatore). Durante la generazione del feed, il plugin interroga un batch di prodotti, costruisce i dati di ciascun prodotto, quindi passa tali dati al writer per il formato del feed. I filtri seguenti si trovano all'interno di questo passaggio di scrittura: vengono eseguiti una volta per prodotto, o una volta per ogni esecuzione di generazione del feed per gli hook di intestazione e channel-link. Poiché vengono attivati durante l'output del writer, le modifiche apportate qui si applicano solo al formato a cui si rivolgono. Un filtro sul writer XML non influisce su un feed CSV, e viceversa.

Filtri per feed XML

adt_product_feed_xml_attribute_value: Filtra il valore di un singolo attributo XML subito prima che venga scritto nel nodo XML del prodotto. Usalo per modificare l'output di un attributo per i feed XML senza toccare alcun altro attributo o formato.

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 è la chiave dell'attributo che viene scritta (ad esempio title), $product è il nodo SimpleXMLElement in fase di costruzione e $product_data è l'array completo dei dati del prodotto per quella riga. Restituisci il valore che desideri venga scritto per quell'attributo.

adt_product_feed_xml_attribute_handling: Un filtro di interruzione che ti consente di gestire completamente la scrittura di un attributo in XML, invece di limitarti a cambiarne il valore. Restituisci true per indicare al plugin di saltare la propria gestione per quell'attributo. La tua callback è quindi responsabile della scrittura del nodo su $product stesso.

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

Se restituisci true da adt_product_feed_xml_attribute_handling ma non scrivi nulla su $product, quell'attributo viene silenziosamente eliminato dal feed. Restituisci true solo una volta che la tua callback ha effettivamente aggiunto il nodo.

adt_pfp_google_shopping_feed_channel_link e adt_pfp_feed_channel_link: Filtra l'URL a livello di canale scritto nell'intestazione del feed. Il primo si applica ai feed sulla tassonomia di Google Shopping, dove imposta <link> all'interno di <channel>. Il secondo si applica a Yandex, Zap.co.il, Salidzini.lv e Pinterest RSS Board, e l'elemento differisce per formato: Yandex scrive <url> all'interno di <shop>, Zap.co.il e Salidzini.lv scrivono <link> alla radice del documento, e Pinterest RSS Board scrive <link> all'interno di <channel>. Entrambi ricevono l'URL della home page del sito e il feed in fase di generazione, ed entrambi devono restituire una stringa 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/';
}

Filtri per feed CSV e TSV

adt_product_feed_csv_header: Filtra la stringa della riga di intestazione appena prima che venga scritta come prima riga di un feed CSV o TSV. Viene attivato una volta, sul primo batch di un'esecuzione di generazione del feed.

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: Filtra l'array di valori delle celle che compongono una singola riga CSV o TSV, appena prima che venga scritta nel file del feed. Questo è il filtro da utilizzare quando è necessario rimodellare o ricalcolare un valore che si applica solo all'output 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 è un array semplice dei valori delle celle della riga in ordine di colonna, corrispondente alla riga di intestazione da adt_product_feed_csv_header. Poiché TSV condivide questo stesso percorso di codice, una callback aggiunta qui viene eseguita per entrambi i formati. Se hai bisogno di un comportamento specifico per formato, controlla il formato del file del feed su $feed all'interno della tua callback.

La correzione del batch vuoto

Versioni di Product Feed Pro precedenti alla 13.5.5 presentavano un bug per cui un feed CSV con un batch vuoto (un'esecuzione di generazione che restituiva zero prodotti) poteva attivare la logica di validazione XML e interrompersi con un errore "not valid XML", anche se il feed non era mai destinato a produrre XML. Il batch vuoto non superava il controllo has-products del ramo CSV e finiva nel ramo XML, che tentava quindi di scrivere e validare il feed CSV come XML. La versione 13.5.5 ha limitato quel ramo XML ai feed il cui formato è effettivamente XML, quindi un batch CSV o TSV vuoto ora non scrive nulla e non può più essere instradato attraverso la validazione solo XML. Se sei alla versione 13.5.5 o successiva, questo non può ripetersi. Se sei su una versione precedente, aggiorna il plugin prima di fare affidamento su uno qualsiasi dei filtri in questo articolo.

Testare le modifiche in sicurezza

  • Usa prima un sito di staging. Testa i filtri a livello di writer in un luogo in cui un feed non funzionante non influenzi i tuoi elenchi di prodotti o account pubblicitari live.
  • Testa con un piccolo batch. Filtra fino a una singola categoria, in modo da poter ispezionare l'output rapidamente invece di attendere un'esecuzione completa del catalogo.
  • Rigenera manualmente il feed dalla pagina Gestisci feed dopo aver aggiunto o modificato un filtro, quindi apri il file del feed raw per confermare che la tua modifica appaia come previsto.
  • Verifica conflitti di filtri. Se più di un plugin o snippet aggancia lo stesso filtro, vengono eseguiti nell'ordine di registrazione (o per priorità, se ne hai impostata una). Registra i valori in entrata e in uscita nella tua callback durante il test per confermare che nulla a monte stia sovrascrivendo la tua modifica.
  • Ritesta dopo un aggiornamento del plugin. I nomi degli hook fanno parte dell'API pubblica del plugin e AdTribes evita di rinominarli senza preavviso, ma è comunque buona norma confermare che le tue personalizzazioni funzionino ancora dopo l'aggiornamento.

Domande frequenti

Dove aggiungo questo codice?
Aggiungilo a un plugin personalizzato (specifico del sito) o al file functions.php del tuo tema attivo se non stai usando un tema child. Non modificare direttamente i file di Product Feed Pro, poiché eventuali modifiche lì andranno perse al prossimo aggiornamento del plugin.
Il mio filtro sopravvivrà a un aggiornamento del plugin?
Sì, purché tu lo aggiunga tramite un plugin personalizzato o il tuo tema, e purché il nome dell'hook rimanga lo stesso. AdTribes considera i nomi degli hook come parte dell'API pubblica del plugin. Tuttavia, testa su staging dopo ogni aggiornamento.
Posso aggiungere un attributo nuovo di zecca al feed in questo modo?
Non direttamente con questi filtri di scrittura. Per aggiungere un nuovo attributo disponibile per la mappatura dei campi, usa adt_product_feed_attributes o adt_product_feed_custom_attributes, trattati in Hook e filtri disponibili in Product Feed Pro. Una volta che un attributo è mappato, i filtri di scrittura in questo articolo ti consentono di modificare come il suo valore viene scritto nel file.
Funziona per i feed JSONL?
No. I feed JSONL e JSONL.GZ utilizzano uno scrittore separato con il proprio filtro, adt_product_feed_jsonl_product. Questo è fuori dallo scopo di questo articolo, ma è elencato nel riferimento degli hook sopra.

Serve ulteriore aiuto?

Se sei su Product Feed Elite o un altro plugin premium di AdTribes e hai bisogno di aiuto con una personalizzazione specifica, apri un ticket di supporto e il team potrà indicarti l'hook giusto per il tuo caso d'uso.

Se stai utilizzando il plugin gratuito Product Feed Pro, poni la tua domanda sul forum di supporto di WordPress.org.

Questo articolo è stato utile?

Articoli Correlati

Completa il tuo acquisto
Feed Prodotti WooCommerce AdTribes

Il miglior plugin per i feed di prodotti WooCommerce

  • AdTribes Pty Ltd
    ABN: 40 675 636 816
Prodotto
Risorse e Informazioni
Siti Partner
Rymera