Memperluas Penyimpanan Data CRUD di WooCommerce

Diterbitkan: 2018-01-25

Pernahkah Anda mendengar tentang CRUD? Dalam pemrograman itu adalah singkatan dari C reate, R ead, U pdate, dan D elete, operasi dasar yang kita semua lakukan dengan data kita. Dengan WooCommerce, itu termasuk produk, pesanan, pelanggan, kupon, dan data lain yang tersimpan di database Anda.

Perubahan terbaru pada WooCommerce yang berkaitan dengan CRUD berarti bahwa platform sedang dalam perjalanan untuk menjadi lebih skalabel. Catatan: Posting ini memang teknis dan mengasumsikan tingkat kenyamanan tertentu dengan kode PHP.

Pembelajar audio? Poin-poin dalam posting ini adalah dari pembicaraan saya di WooConf 2017.

WooCommerce yang lebih skalabel

Untuk membuat hidup lebih mudah bagi pengembang kami, kami menambahkan objek CRUD khusus di WooCommerce 3.0. Ini menggantikan semua kode meta posting sebelumnya di WooCommerce dan juga harus digunakan oleh semua ekstensi untuk mengaktifkan situs WooCommerce untuk diskalakan.

Pada saat yang sama kami menambahkan kumpulan objek lain yang disebut Penyimpanan Data, yang dirancang untuk memuat dan menyimpan data WooCommerce Anda ke dan dari database. Abstraksi ini dirancang untuk memungkinkan WooCommerce menangani pesanan, produk, dan pelanggan dalam jumlah yang lebih besar. Ini dilakukan dengan menghubungkan ke WooCommerce agar menggunakan cara yang berbeda untuk menyimpan data.

Setiap implementasi penyimpanan data menentukan bagaimana data disimpan dan diambil, apakah itu dari database atau cara lain untuk menyimpan data secara bersamaan. Dengan menggunakannya, sekarang dimungkinkan untuk meningkatkan WooCommerce hingga volume penjualan perusahaan, dengan implementasi yang dapat menangani jutaan pesanan. Yang harus dilakukan hanyalah menghubungkan ke filter yang mendefinisikan ulang apa yang digunakan WooCommerce untuk menyimpan data.

Selain peningkatan kinerja yang dapat diberikan oleh CRUD dan abstraksi penyimpanan data, konstruksi ini memungkinkan lebih banyak fleksibilitas dalam cara Anda menyimpan dan memuat data untuk toko WooCommerce Anda. Untuk setiap jenis datum WooCommerce (produk, pesanan, pelanggan, dll.), Anda sekarang memiliki kemampuan untuk memutuskan secara terprogram dari mana data itu harus datang, dan ke mana harus pergi. Ini memungkinkan pembuat toko untuk menyesuaikan WooCommerce agar sesuai dengan kebutuhan mereka dengan berinteraksi dengan sistem lain, atau meningkatkan kinerja berbagai bagian WooCommerce sesuai kebutuhan.

Selain peningkatan kinerja yang dapat diberikan oleh CRUD dan abstraksi penyimpanan data, konstruksi ini memungkinkan lebih banyak fleksibilitas dalam cara Anda menyimpan dan memuat data untuk toko WooCommerce Anda.

Apa sebenarnya artinya itu? Nah, pikirkan kemungkinannya:

  • Menyimpan data pesanan di database terpisah dari wpdb.
  • Mendapatkan data produk dari database yang ada pada sistem lain.
  • Berbagi inventaris produk di beberapa situs (contoh di bawah).
    Mengambil data produk melalui API dari sumber lain.
    Membuat perintah CLI untuk memuat dari satu penyimpanan data dan menyimpan ke yang lain (impor/ekspor bawaan).

Memperluas penyimpanan data

Dengan CRUD dan abstraksi penyimpanan data, WooCommerce tidak lagi peduli dari mana data itu berasal atau bagaimana data itu disimpan. Anda bisa mengendalikan itu semua sendiri.

Dalam contoh di bawah ini, saya mengambil jumlah inventaris dari layanan terpisah, dan hanya jumlah inventaris setiap objek produk yang diubah. Salah satu manfaat melakukan ini adalah saya dapat memiliki beberapa situs WooCommerce yang menjual dari jumlah inventaris yang sama dan memastikan bahwa saya tidak menjual terlalu banyak stok saya.

Inilah titik masuknya, filter 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

Untuk penyimpanan data aktual, ada dua antarmuka yang harus diterapkan: WC_Object_Data_Store_Interface dan WC_Product_Data_Store_Interface .

Penyimpanan data ini dirancang untuk menambah penyimpanan data yang ada (biasanya implementasi meta pos default). Dibutuhkan penyimpanan data yang ada di konstruktornya dan hanya memodifikasi cara penanganan inventaris. Segala sesuatu yang lain ditangani secara normal melalui penyimpanan data yang ada.

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

Untuk sebagian besar fungsi yang diperlukan, penyimpanan data ini hanya memanggil penyimpanan data induk:

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

Satu-satunya perubahan yang diperkenalkan oleh penyimpanan data ini adalah bagaimana inventaris dibaca. Untuk kasus ini, ia membaca dari penyimpanan data induk secara normal tetapi menimpa jumlah stok sebelum kembali:

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

Dengan CRUD dan abstraksi penyimpanan data, WooCommerce tidak lagi peduli dari mana data itu berasal atau bagaimana data itu disimpan. Anda bisa mengendalikan itu semua sendiri.

Jumlah stok di atas diambil dari API. Dalam aplikasi dunia nyata, panggilan API ini bisa masuk ke sistem kontrol inventaris, atau POS, atau bahkan situs WooCommerce lainnya.

Kode lengkap untuk contoh di atas tersedia di: https://github.com/coderkevin/woocommerce-product-inventory-datastore

Kemungkinan tak terbatas dengan objek CRUD dan penyimpanan data

Seperti yang ditunjukkan dalam contoh di atas, kemungkinannya tidak terbatas. WooCommerce 3.3, yang akan dirilis pada 30 Januari, berisi tonggak menarik lebih lanjut terkait dengan CRUD. Lebih lanjut di: WooCommerce 3.3 CRUD Webhook Baru.

Gunakan imajinasi Anda untuk membuat solusi data dengan cara baru dan menarik dengan objek CRUD dan penyimpanan data, dan pastikan untuk memberi tahu kami bagaimana tarif Anda baik di Komentar atau dengan bergabung dengan komunitas WooCommerce Slack.