Inizia
Come aggiornare i feed di prodotto utilizzando i cron job - AdTribes
  1. Casa
  2. Knowledge Base
  3. Suggerimenti generali per il feed
  4. Come aggiornare i feed di prodotto utilizzando i cron job

Come aggiornare i feed di prodotto utilizzando i cron job

Se il tuo ambiente di hosting limita lo scheduler delle attività integrato di WordPress, o se hai bisogno che i feed vengano aggiornati in un momento preciso che gli intervalli orari, due volte al giorno o giornalieri del plugin non soddisfano, puoi invece gestire gli aggiornamenti dei feed da un cron job a livello di server. Questo ti dà un controllo esatto sui tempi ed evita di fare affidamento sul traffico dei visitatori per attivare lo scheduler di WordPress.

Sintomi comuni: feed bloccati su dati vecchi, tempi di aggiornamento che variano tra le visite, o ambienti di hosting che disabilitano wp-cron.

Product Feed Pro e Product Feed Elite supportano entrambi due approcci: un comando WP-CLI (consigliato) e uno script PHP autonomo per server senza WP-CLI.

Se i tuoi feed non venivano aggiornati durante le esecuzioni pianificate su un server case-sensitive (Linux, Kinsta o simili), questo era un bug noto risolto nella versione 13.5.4. L'aggiornamento del plugin risolve il problema senza richiedere una configurazione cron personalizzata.

Prima di iniziare

  • Product Feed Pro o Product Feed Elite installato e attivo
  • Almeno un feed di prodotto creato e configurato
  • Accesso SSH o cPanel al tuo server per aggiungere cron job
  • Il tuo ID feed (vedi Passaggio 1 in entrambi i metodi sottostanti)
  • Versione 13.5.4 o successiva per il supporto WP-CLI

WP-CLI è disponibile sulla maggior parte degli host WordPress gestiti. È il modo più semplice e affidabile per attivare un aggiornamento del feed da un cron job del server. Nessun file PHP da gestire, nessun bootstrapping di WordPress richiesto.

Passaggio 1: Trova il tuo ID feed

  1. Vai su Product Feed → Gestisci Feed nella tua bacheca WordPress.
  2. Fai clic sul feed che desideri aggiornare.
  3. Guarda la barra degli indirizzi del browser. L'ID del feed è il valore del parametro id — ad esempio, admin.php?page=adt-edit-feed&id=123 significa che il tuo ID feed è 123.
La barra degli indirizzi del browser mostra un URL di amministrazione di WordPress con la pagina=adt-edit-feed&id=13 evidenziata.

Passaggio 2: Disabilita l'intervallo di aggiornamento integrato

Per evitare che lo scheduler del plugin esegua un aggiornamento duplicato insieme al tuo cron job:

  1. Mentre modifichi il feed, vai alla scheda Generale.
  2. Imposta Intervallo di aggiornamento su Nessun aggiornamento.
  3. Fai clic su Save Changes.
Feed con intervallo di aggiornamento "Nessun aggiornamento"

Passaggio 3: Aggiungi il cron job del server

Sul tuo server, aggiungi una voce cron che esegua wp adt-feed refresh secondo la pianificazione scelta. Sostituisci /path-to-wordpress con la directory principale effettiva del tuo sito e 123 con il tuo ID feed:

0 2 * * * cd /path-to-wordpress && wp adt-feed refresh 123 >> /tmp/feed-refresh-123.log 2>&1

Questo esempio viene eseguito ogni giorno alle 2:00. Modifica l'espressione di pianificazione per soddisfare le tue esigenze.

Se wp non è nel PATH predefinito del tuo server, usa il percorso completo del binario WP-CLI (ad esempio /usr/local/bin/wp) invece di solo wp.

Per aggiornare più feed in un unico cron job, elenca i loro ID separati da spazi:

0 2 * * * cd /path-to-wordpress && wp adt-feed refresh 123 456 789

Metodo 2: Script PHP

Usa questo metodo se il tuo server non supporta WP-CLI.

Lo script PHP avvia la generazione del feed mettendolo in coda tramite Action Scheduler. L'elaborazione effettiva avviene in background: il feed non verrà aggiornato nello stesso istante in cui viene eseguito lo script. Assicurati che il cron di WordPress (o un cron del server separato che raggiunge wp-cron.php) sia attivo in modo che Action Scheduler possa completare i batch.

Passaggio 1: Trova il tuo ID feed

Segui gli stessi passaggi del Metodo 1, Passaggio 1 sopra. Fai clic sul tuo feed per modificarlo e leggi il valore id= dall'URL.

Passaggio 2: Crea lo script PHP

Crea un nuovo file chiamato feed-refresh-123.php (sostituisci 123 con l'ID del tuo feed) e salvalo nella directory del tuo child theme, ad esempio wp-content/themes/your-child-theme/feed-refresh-123.php.

Aggiungi questo codice al file, sostituendo 123 con l'ID effettivo del tuo feed:

/**
 * Product Feed Generation Cron Script
 */

// Start timing
$start_time = microtime(true);

// Simple logging function
function log_message($message) {
    $timestamp = date('Y-m-d H:i:s');
    $log_entry = "[$timestamp] $message";
    
    error_log($log_entry);
    echo $log_entry . "\n";
}

log_message("Feed generation started");

try {
    // Load WordPress (3 levels up from wp-content/themes/your-child-theme/)
    require_once(__DIR__ . '/../../../wp-load.php');
    
    $feed_id = 123; // Change this to your actual feed ID
    
    $feed = \AdTribes\PFP\Helpers\Product_Feed_Helper::get_product_feed($feed_id);
    
    if ($feed) {
        $feed->generate();
        
        $execution_time = round(microtime(true) - $start_time, 2);
        log_message("Feed ID $feed_id generated successfully in {$execution_time}s");
        
    } else {
        log_message("ERROR: Failed to get feed ID $feed_id");
    }
    
} catch (Exception $e) {
    log_message("ERROR: " . $e->getMessage());
}

Passaggio 3: Disabilita l'intervallo di aggiornamento integrato

Segui gli stessi passaggi del Metodo 1, Passaggio 2 sopra: imposta Intervallo di aggiornamento su Nessun aggiornamento nella scheda Generale.

Passaggio 4: Aggiungi il cron job del server

Aggiungi la seguente voce cron sul tuo server, sostituendo i percorsi con i tuoi valori effettivi:

0 2 * * * php /path-to-wordpress/wp-content/themes/your-child-theme/feed-refresh-123.php >> /path-to-wordpress/wp-content/themes/your-child-theme/feed-refresh-123.log 2>&1

Questo viene eseguito ogni giorno alle 2:00. L'output viene scritto in un file di log nella stessa directory, quindi puoi verificare se lo script è stato eseguito e se ha prodotto errori.

Per eseguire più feed in modo indipendente, crea un file PHP e una voce cron separati per ciascun feed.

Risoluzione dei problemi

Il feed non si aggiorna dopo l'esecuzione del cron
Innanzitutto, controlla il file di log a cui scrive il cron job. Se il log è vuoto, la voce cron non viene eseguita. Ricontrolla il percorso del file e che il demone cron sia attivo sul tuo server.

Se il log mostra output ma il feed non si aggiorna ancora, verifica che l'ID del feed sia corretto: apri il feed nell'amministrazione di WordPress e conferma che il valore id= nell'URL corrisponda all'ID nel tuo script o comando WP-CLI.
I feed pianificati non si aggiornano su un server Linux o Kinsta
Questo era un bug noto (corretto nella versione 13.5.4) in cui il plugin scriveva il feed aggiornato in un nome file minuscolo, mentre l'URL del feed utilizzava il nome file originale con maiuscole/minuscole miste. Sui file system sensibili alle maiuscole/minuscole, questi sono due file diversi. Aggiorna il plugin alla versione 13.5.4 o successiva per risolverlo.
Il comando WP-CLI restituisce "comando non trovato"
Il binario wp potrebbe non essere nel PATH del tuo server. Contatta il tuo host per confermare che WP-CLI sia disponibile e chiedi il percorso completo. Quindi aggiorna la tua voce cron per utilizzare il percorso completo (ad es. /usr/local/bin/wp adt-feed refresh 123).
Lo script PHP restituisce un errore fatale relativo a una classe mancante
La classe AdTribes\PFP\Helpers\Product_Feed_Helper è disponibile solo dopo che il plugin è stato caricato tramite wp-load.php. Assicurati che la riga require_once punti al percorso corretto di wp-load.php. Il percorso deve corrispondere alla directory principale della tua installazione di WordPress, non a una sottodirectory.

Domande frequenti

Ho bisogno di Product Feed Elite per questo?
No. Entrambi i metodi funzionano con Product Feed Pro (gratuito) e Product Feed Elite.
Posso mantenere abilitato l'intervallo di aggiornamento integrato insieme a un cron del server?
Puoi, ma non è consigliato. L'esecuzione di entrambi contemporaneamente potrebbe causare la generazione del feed due volte in rapida successione. Disabilita l'intervallo integrato e lascia che il cron del server controlli la pianificazione.
Come trovo la giusta espressione per la pianificazione cron?
Usa un generatore di espressioni cron (cerca "cron expression generator") per creare la pianificazione di cui hai bisogno. I cinque campi sono: minuto, ora, giorno del mese, mese, giorno della settimana.
L'approccio con script PHP funziona sull'hosting condiviso?
Sì, a patto che tu abbia accesso a cPanel o SSH per aggiungere processi cron e che il server possa eseguire PHP dalla riga di comando. Se il tuo host non supporta PHP da riga di comando o i processi cron, usa invece l'impostazione Intervallo di aggiornamento integrata nel plugin.

Serve ulteriore aiuto?

Se utilizzi Product Feed Elite, apri un ticket di supporto e il nostro team ti aiuterà a configurare l'impostazione cron per il tuo ambiente.

Se sei su Product Feed Pro, poni la tua domanda nel 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