Estendere i data store CRUD in WooCommerce

Pubblicato: 2018-01-25

Hai sentito parlare di CRUD? Nella programmazione sta per Crea , Leggi, Aggiorna ed Elimina , operazioni di base che tutti eseguiamo con i nostri dati. Con WooCommerce, ciò include prodotti, ordini, clienti, coupon e altri dati archiviati nel tuo database.

Le recenti modifiche a WooCommerce relative a CRUD significano che la piattaforma sta diventando più scalabile. Nota: questo post diventa tecnico e presuppone un certo livello di comfort con il codice PHP.

Studente di audio? I punti in questo post provengono dal mio intervento a WooConf 2017.

Un WooCommerce più scalabile

Per semplificare la vita ai nostri sviluppatori, abbiamo aggiunto speciali oggetti CRUD in WooCommerce 3.0. Questo sostituisce tutto il metacodice post precedente in WooCommerce e deve essere utilizzato anche da tutte le estensioni per consentire la scalabilità di un sito WooCommerce.

Allo stesso tempo abbiamo aggiunto un altro set di oggetti chiamato Data Store, che sono progettati per caricare e salvare i tuoi dati WooCommerce da e verso il database. Queste astrazioni sono progettate per consentire a WooCommerce di gestire una quantità maggiore di ordini, prodotti e clienti. Ciò si ottiene collegandosi a WooCommerce per utilizzare mezzi diversi per archiviare i dati.

Ciascuna implementazione dell'archivio dati determina il modo in cui i dati vengono archiviati e recuperati, indipendentemente dal fatto che provengano da un database o da un altro modo di archiviare i dati del tutto. Usandoli, è ora possibile scalare WooCommerce fino ai volumi di vendita aziendali, con implementazioni in grado di gestire milioni di ordini. Tutto ciò che deve essere fatto è collegarsi a un filtro che ridefinisca ciò che WooCommerce utilizza per archiviare i dati.

Oltre ai miglioramenti delle prestazioni che il CRUD e le astrazioni del data store possono fornire, questi costrutti consentono molta più flessibilità nel modo in cui salvi e carichi i dati per il tuo negozio WooCommerce. Per ogni tipo di dato WooCommerce (prodotti, ordini, clienti, ecc.), ora hai la possibilità di decidere in modo programmatico da dove dovrebbero provenire quei dati e dove dovrebbero andare. Ciò consente ai costruttori di negozi di personalizzare WooCommerce in base alle proprie esigenze interfacciandosi con altri sistemi o aggiornando le prestazioni di diverse parti di WooCommerce secondo necessità.

Oltre ai miglioramenti delle prestazioni che il CRUD e le astrazioni del data store possono fornire, questi costrutti consentono molta più flessibilità nel modo in cui salvi e carichi i dati per il tuo negozio WooCommerce.

Cosa significa esattamente? Bene, pensa alle possibilità:

  • Salvataggio dei dati dell'ordine in un database separato da wpdb.
  • Ottenere i dati del prodotto da un database esistente su un altro sistema.
  • Condivisione dell'inventario dei prodotti su più siti (esempio di seguito).
    Recupero dei dati di prodotto tramite un'API da un'altra fonte.
    Creazione di un comando CLI per caricare da un archivio dati e salvarlo in un altro (importazione/esportazione incorporata).

Estendere i datastore

Con le astrazioni CRUD e data store, WooCommerce non si preoccupa più da dove provengono i dati o come vengono salvati. Puoi controllarlo tutto da solo.

Nell'esempio seguente, recupero il conteggio dell'inventario da un servizio separato e viene modificato solo il conteggio dell'inventario di ciascun oggetto prodotto. Un vantaggio di fare questo è che posso avere più siti WooCommerce che vendono dallo stesso conteggio di inventario ed essere sicuro di non aver venduto eccessivamente le mie azioni.

Ecco il punto di ingresso, il filtro install_data_store .

class WC_Product_Inventory_Data_Store_Plugin {
public function __construct() {
add_filter( 'woocommerce_data_stores', array( $this, 'install_data_store' ) );
}
public function install_data_store( $stores ) {
include_once dirname( __FILE__ ) . '/class-product-inventory-data-store.php';
$instance = new WC_Product_Inventory_Data_Store( $stores[ 'product' ] );
$stores[ 'product' ] = $instance;
return $stores;
}
}
new WC_Product_Inventory_Data_Store_Plugin();
view raw class-woocommerce-product-inventory-datastore-plugin.php hosted with ❤ by GitHub

Per l'archivio dati effettivo, sono disponibili due interfacce da implementare: WC_Object_Data_Store_Interface e WC_Product_Data_Store_Interface .

Questo archivio dati è progettato per aumentare l'archivio dati esistente (in genere l'implementazione post-meta predefinita). Prende l'archivio dati esistente nel suo costruttore e modifica solo il modo in cui viene gestito l'inventario. Tutto il resto viene gestito normalmente tramite l'archivio dati esistente.

class WC_Product_Inventory_Data_Store
implements WC_Object_Data_Store_Interface, WC_Product_Data_Store_Interface {
public function __construct( &$parent_data_store ) {
$this- > parent_instance = $this- > create_parent_instance( $parent_data_store );
}
view raw class-product-inventory-data-store.php hosted with ❤ by GitHub

Per la maggior parte delle funzioni richieste, questo archivio dati chiama semplicemente l'archivio dati principale:

public function update( &$product ) {
$this- > parent_instance- > update( $product );
}
view raw class-product-inventory-data-store.php hosted with ❤ by GitHub

L'unico cambiamento introdotto da questo archivio dati è il modo in cui viene letto l'inventario. In questo caso, legge normalmente dall'archivio dati padre ma sovrascrive la quantità di stock prima di restituire:

public function read( &$product ) {
$this- > parent_instance- > read( $product );
$inventory_url = 'http://localhost:8080/api/inventory/' . $product- > get_sku();
$request = wp_remote_get( $inventory_url );
$response = wp_remote_retrieve_body( $request );
$data = json_decode( $response );
$product- > set_stock_quantity( $data );
}
view raw class-product-inventory-data-store.php hosted with ❤ by GitHub

Con le astrazioni CRUD e data store, WooCommerce non si preoccupa più da dove provengono i dati o come vengono salvati. Puoi controllarlo tutto da solo.

La quantità di stock sopra viene recuperata da un'API. In un'applicazione del mondo reale, questa chiamata API potrebbe andare a un sistema di controllo dell'inventario, a un POS o persino a un altro sito WooCommerce.

Il codice completo per l'esempio sopra è disponibile su: https://github.com/coderkevin/woocommerce-product-inventory-datastore

Infinite possibilità con oggetti CRUD e archivi dati

Come dimostrato negli esempi precedenti, le possibilità sono infinite. WooCommerce 3.3, in uscita il 30 gennaio, contiene un'altra entusiasmante pietra miliare relativa a CRUD. Altro su: WooCommerce 3.3 Nuovi Webhook CRUD.

Usa la tua immaginazione per creare soluzioni di dati in modi nuovi e interessanti con oggetti CRUD e archivi di dati e assicurati di farci sapere come te la cavi nei commenti o unendoti alla community di WooCommerce Slack.