Migrasi toko web Yoast.com dari EDD ke WooCommerce
Diterbitkan: 2018-02-27Di Yoast, kami mengoptimalkan setiap aspek kinerja situs web. Tujuan kami adalah menjadikan web tempat yang lebih baik dengan membuat situs web lebih bermanfaat, lebih mudah dinavigasi, lebih cepat, dan lebih andal.
Pada bulan September 2017 kami memigrasikan toko web kami dari Easy Digital Downloads (EDD) ke WooCommerce — tempat kami menjual semua alat, produk, dan konten yang tersedia di yoast.com. Dalam posting ini saya akan menjelaskan mengapa kami melakukannya, apa yang kami bangun, dan apa manfaatnya bagi kami dan bagi pengguna kami di masa depan. WooCommerce telah memberi kami landasan teknis untuk dibangun selama bertahun-tahun yang akan datang.
Mengapa perubahan?
Yoast.com mengalami pertumbuhan luar biasa yang didorong oleh dua komponen utama — popularitas plugin kami, dan audiens blog SEO kami yang terus bertambah. Kombinasi kedua elemen ini, bagaimanapun, menjadikan yoast.com sebagai situs web yang menantang untuk dikelola.
Secara historis, situs ini telah berevolusi dari instalasi WordPress sederhana. Easy Digital Downloads (EDD) ditambahkan oleh pendiri Yoast Joost de Valk untuk memfasilitasi penjualan plugin premium. Kami juga menggunakan EDD untuk melayani pembaruan untuk semua instalasi Premium di luar sana di dunia.
Selama bertahun-tahun kami telah membuat lebih banyak penyesuaian untuk memastikan EDD masih dapat memenuhi kebutuhan kami. Memungkinkan pelanggan kami untuk membayar dalam euro atau dolar, misalnya, merupakan upaya yang sangat besar. Karena kami ingin menambahkan mata uang lain di masa mendatang, kami perlu menemukan solusi yang berbeda.
Ketika kami melihat opsi lain, kami mempertimbangkan beberapa kebutuhan:
- Mampu mendukung pembelian multi-mata uang.
- Mampu mendukung pembayaran berulang.
- Biaya integrasi bangunan dan pemeliharaan platform.
- Mampu mendukung akun pengguna.
- Membuat platform SEO.
- Mempertimbangkan kompatibilitas di masa depan, karena kami ingin memiliki situs yang akan tetap berfungsi dalam 5-10 tahun.
Untuk mencapai semua hal di atas, kami harus membuat rencana.
Membuat ide
Pada Januari 2017 kami menjadwalkan pertemuan dengan tim arsitek kami: Joost, Omar, Jip, dan saya sendiri. Kami mendiskusikan apa kebutuhan kami dan bagaimana cara terbaik untuk memenuhinya.
Kesimpulan pertama kami adalah bahwa kami tidak ingin pindah dari WordPress. Meskipun kami sekarang memiliki plugin untuk platform lain, kami adalah penggemar WordPress dan sangat peduli dengan misinya. WordPress adalah tempat asal kami, dan itu telah bekerja dengan sangat baik bagi kami sebagai CMS.
Mengapa WooCommerce?
Kami kemudian mempertimbangkan platform eCommerce mana yang ingin kami gunakan. Kami bertanya pada diri sendiri apa solusi eCommerce terbaik untuk WordPress, dan sampai pada kesimpulan bahwa itu adalah WooCommerce. Tapi, seperti EDD, WooCommerce tidak mendukung banyak mata uang. Jadi kami membutuhkan solusi.
Saya penggemar berat gagasan bahwa semuanya adalah remix. Kami terinspirasi oleh ide untuk menggunakan situs yang berbeda untuk setiap bahasa, sebuah ide yang dijalankan dengan baik oleh plugin MultilingualPress. Jadi kami mencampurnya kembali: untuk menghindari keharusan menulis banyak kode khusus, kami memutuskan untuk menggunakan instalasi multisite.
Akibatnya, WooCommerce tidak perlu mengelola mata uang yang berbeda. Di situs dolar, WooCommerce melakukan segalanya dalam dolar. Di situs euro, WooCommerce melakukan segalanya dalam euro. Ini juga membuatnya relatif mudah untuk menambahkan mata uang baru. Kami baru saja menambahkan situs baru dan menyalin pengaturannya. Dikombinasikan dengan MultilingualPress, di masa mendatang ini juga akan memungkinkan kami untuk mendukung berbagai bahasa.
WooCommerce akhirnya menjadi sangat cocok untuk yoast.com karena beberapa alasan:
- Model data yang bagus.
- Sebuah ekosistem besar.
- Dukungan REST API dan Webhook bawaan.
- Kemungkinan untuk melakukan dogfood plugin kami dalam kombinasi dengan WooCommerce.
- WooCommerce memecahkan domain eCommerce. Kami tidak ingin menghabiskan banyak waktu mengerjakan domain eCommerce. SEO adalah keahlian kami, jadi kami ingin fokus pada SEO.
- WooCommerce memiliki komunitas yang dinamis di mana kami dapat berpartisipasi.
eCommerce: SKU, catatan sejarah, dan pengembalian uang
Saya ingin fokus sejenak pada domain eCommerce. Salah satu aspek yang perlu dipertimbangkan di sini adalah SKU. Setiap produk memiliki SKU — pengenal unik. SKU mungkin terdengar seperti sesuatu yang berlebihan. Mengapa saya memerlukan SKU ketika saya memiliki ID di database? Tetapi kemudian Anda menyadari bahwa setiap departemen keuangan di setiap perusahaan sudah memiliki sistem ini. SKU tidak bertambah secara otomatis — Anda memerlukan cara untuk melacak produk dengan cara yang tidak ambigu. Nama tidak cocok untuk ini. Jadi di yoast.com, SKU sekarang adalah nomor yang sama yang digunakan departemen keuangan kami untuk melacak produk.
Persyaratan lain adalah memiliki catatan sejarah setiap pembelian. WooCommerce melakukan ini secara default. Setelah pesanan selesai, itu saja. Semua data tidak dapat diubah. Jika pelanggan mengubah nama, alamat, atau email mereka, informasi baru hanya digunakan untuk pesanan baru. Bagi seorang pengembang ini mungkin terdengar aneh, tetapi sebenarnya ini adalah sebuah kekuatan. Anda juga tidak ingin bank Anda mengubah transaksi setelahnya — begitu transaksi selesai, transaksi selesai. Setiap mutasi adalah transaksi baru.
Memiliki catatan sejarah membuat perbedaan terbesar dalam hal pengembalian uang. Dalam pengaturan lama, pesanan yang dikembalikan dananya akan hilang dari ekspor kami, yang akan mengubah pendapatan bulan itu. Di WooCommerce, setiap pengembalian dana memiliki tanggal dan jumlahnya sendiri. Jadi sebulan sekali dilakukan, itu benar-benar selesai.
Di WooCommerce, setiap pengembalian dana memiliki tanggal dan jumlahnya sendiri. Jadi sebulan sekali dilakukan, itu benar-benar selesai.
Detail teknis migrasi Yoast.com ke WooCommerce
Migrasi
Kami memiliki banyak data historis, yang berarti kami harus memigrasikan sejumlah besar pesanan. Kami memilih alat yang disebut pandas, alat yang dirancang untuk menangani kumpulan data besar, dan pilihan yang baik untuk memigrasikan semuanya sekaligus. Jika kami merencanakan migrasi lain, kami mungkin akan pergi ke arah yang berbeda — kami akan perlahan memformat data historis selama berbulan-bulan. Itu akan secara drastis mengurangi jumlah data yang akan dimigrasikan pada hari pemindahan yang sebenarnya.
Ada satu titik nyeri utama yang membuat prosesnya lebih kompleks dari yang seharusnya. Karena semua data disimpan dalam satu nilai meta dalam database, data tersebut perlu di-unserialized. Python tidak memiliki cara yang efisien dan benar untuk melakukan unserialization PHP, jadi kami akhirnya keluar ke PHP untuk dapat unserialize data ini.
Menggabungkan data
Anda mungkin telah memperhatikan bahwa kami sekarang memiliki dua situs. Tetapi kami masih ingin memiliki gambaran umum tentang semua data di satu lokasi. Ini adalah salah satu alasan kami membangun MyYoast. Semua pesanan yang kami terima disinkronkan ke MyYoast. Ini berarti bahwa MyYoast tahu segalanya.
WooCommerce memiliki sistem untuk menyinkronkan semua pesanan: webhook. Kelemahan terbesar dari webhook secara umum adalah jika sistem penerima sedang down, maka webhook tidak akan diterima. Saat melihat kode webhook, Anda menemukan cuplikan berikut:
“`
/*
* Biarkan plugin lain mencegat pengiriman untuk beberapa antrian pesan seperti rabbit/zeromq
*/
return apply_filters( 'woocommerce_webhook_should_deliver', $should_deliver, $this, $arg );
“`
Kami mempertimbangkan untuk menggunakan antrian pesan seperti yang disarankan dalam komentar, tetapi kami menggunakan pendekatan yang lebih sederhana.
Ada proyek delay_job dari komunitas Ruby on Rails. Kami menemukan port PHP yang sesuai dengan kebutuhan kami. Pekerjaan yang tertunda melakukan apa yang disarankan namanya: itu menjadwalkan pekerjaan yang akan dieksekusi nanti. Ini berarti pekerjaan tidak akan pernah hilang. Dan jika pekerjaan itu gagal, itu akan dicoba lagi empat kali. Setelah itu, pekerjaan dapat digunakan untuk men-debug apa yang salah. Ini memberi kami pengaturan yang sangat kuat.
Kami mengonfigurasi WooCommerce untuk mencoba mengirim webhook ke URL tiruan kustom kami: `http://my-yoast-job.url`. Ini memastikan bahwa kami dapat menangkap permintaan ini dari kode. Kami memiliki satu kelas `Scheduler` yang bertanggung jawab untuk menjadwalkan pekerjaan. Ini menangkap permintaan webhook dan mengubahnya menjadi pekerjaan.
Kami memiliki beberapa kelas yang menangani pekerjaan, satu untuk masing-masing blok bangunan dasar yoast.com. Pekerjaan kemudian ditangani oleh seorang pekerja di latar belakang. Proses ini cepat, sehingga pelanggan akan langsung melihat produknya di MyYoast.
WordPress sebagai aplikasi
Jika Anda belum pernah membaca The Twelve-Factor App , saya sangat menyarankan Anda melakukannya. Ini menyarankan kerangka kerja yang sangat kuat untuk pengembangan aplikasi web. Bagaimana ini diterjemahkan ke dalam konteks WordPress? Lebih baik dari yang Anda pikirkan.
WordPress memiliki beberapa fitur unik yang membuatnya lebih sulit untuk diatur. Tetapi Anda dapat mengatasinya untuk mendapatkan instalasi WordPress yang kuat. Jika Anda hanya melakukan salah satu dari ini, itu harus menjadi faktor dependensi. Mulai gunakan Komposer! Itu ada di sini, dan itu berhasil. Rarst membuat ikhtisar yang bagus tentang cara menggunakan Komposer untuk pengembangan WordPress. Pembaruan otomatis bukanlah pilihan untuk aplikasi web yang kompleks. Jadi, Anda memerlukan solusi yang berbeda, dan Komposer melakukan pekerjaan dengan sangat baik.
Pertunjukan
Kami memulai tanpa menggunakan cache objek. Itu ternyata ide yang buruk. Jika Anda menangani volume penjualan yang besar menggunakan WooCommerce, Anda memerlukan caching objek. Tanpa itu, model pesanan harus sepenuhnya diaktifkan kembali pada setiap permintaan terkait pesanan itu. Ini sangat mahal, karena model pesanan diperlukan pada banyak halaman. Minimal, semua halaman checkout perlu mengakses pesanan.
Kami juga membuat beberapa permintaan tarik di WooCommerce itu sendiri untuk meningkatkan kinerja tanpa caching. Salah satunya adalah modifikasi untuk men-cache mata uang. Sebelum modifikasi, semua mata uang akan diterjemahkan setiap kali ada bagian kode yang hanya membutuhkan satu mata uang. Itu sangat tidak efisien mengingat setiap toko hanya beroperasi dalam satu mata uang.
Satu hal yang tidak bisa kami perbaiki begitu saja di dalam WooCommerce sendiri adalah mencari pesanan dan langganan. Melakukan hal ini akan menghasilkan kueri yang dapat menghapus seluruh situs web kami — kueri ini berisi banyak penelusuran untuk meta pos, dan itu membutuhkan waktu lama. Kami mengatasi masalah ini dengan membangun fungsi pencarian kami sendiri di atas MyYoast.
Masalah pencarian meta juga akan terpecahkan jika WooCommerce menggunakan tabel khusus, yang untungnya sudah ada di peta jalan teknis WooCommerce. Masalah ini juga menginformasikan pemikiran kami tentang plugin kami sendiri. Bisakah kita mengurangi jumlah kunci meta yang dibuat oleh Yoast SEO? Hasilnya, kami juga telah menambahkan pembuatan tabel khusus ke peta jalan teknis kami sendiri.
Daftar plugin WordPress dan ekstensi WooCommerce saat ini
Untuk memberikan gambaran menyeluruh tentang di mana kami mendarat, berikut adalah daftar plugin yang saat ini kami gunakan yang relevan dengan fungsi situs kami sebagai toko. Daftar lengkap berisi 55 plugin aktif.
- CMB2: Digunakan untuk menambahkan lebih banyak bidang khusus ke jenis posting.
- Jenis Bidang CMB2: Digunakan untuk melampirkan banyak pos sebagai nilai meta.
- Bidang Pencarian Posting CMB2: Digunakan untuk mencari satu posting untuk dilampirkan sebagai nilai meta.
- Google Authenticator: Menambahkan 2FA ke login kami.
- Google Authenticator, Per Prompt Pengguna: Dengan cara ini semua karyawan Yoast dapat menggunakan 2FA, tetapi pelanggan tidak harus melakukannya.
- MailChimp untuk WordPress dan MailChimp untuk WordPress – Premium: Digunakan untuk menghubungkan pesanan ke MailChimp.
- Anggota: Untuk mengelola izin untuk peran yang berbeda, seperti insinyur dukungan.
- MultilingualPress: Digunakan untuk mengelola situs yang berbeda di multisite.
- Login Kustom MyYoast: Menata gaya layar login.
- Pelaporan Relik Baru untuk WordPress: Kami menggunakan NewRelic untuk melacak kinerja kami.
- Cap pos: Untuk mengirim email dengan andal.
- Skema Warna Romantis Admin: Setiap orang membutuhkan sedikit warna pink dalam hidup mereka!
- WooCommerce: Seperti yang Anda duga, untuk memproses pesanan di yoast.com!
- Yoast SEO: WooCommerce: Menambahkan kompatibilitas antara WooCommerce dan Yoast SEO.
- Yoast SEO Premium: Digunakan untuk pengalihan, saran tautan internal, dan banyak kata kunci.
Daftar plugin WordPress dan ekstensi WooCommerce saat ini
- WooCommerce – Pembayaran Berbasis Negara: Digunakan untuk menunjukkan metode pembayaran yang berbeda kepada pelanggan dari berbagai negara.
- WooCommerce AdyenCw: Digunakan untuk menambahkan gateway pembayaran Adyen ke WooCommerce.
- Tautan Kupon WooCommerce: Digunakan untuk membuat tautan yang secara otomatis menerapkan kupon tertentu.
- Harga Dinamis WooCommerce : Digunakan untuk menawarkan diskon pada pembelian massal.
- WooCommerce Email Customizer: Digunakan untuk menata email yang dikirim WooCommerce.
- Nomor PPN UE WooCommerce: Digunakan untuk mengumpulkan nomor PPN pelanggan Eropa dan memvalidasi nomor tersebut menggunakan layanan VIES.
- WooCommerce Give Products: Digunakan untuk memberikan produk.
- WooCommerce PayPal Express Checkout Gateway: Digunakan untuk menambahkan gateway pembayaran PayPal ke WooCommerce dengan dukungan untuk Langganan WooCommerce.
- Bundel Produk WooCommerce: Digunakan untuk membuat bundel di toko kami.
- Langganan WooCommerce: Digunakan untuk melacak waktu yang tersisa pada dukungan dan pembaruan plugin.
Takeaways dan hasil
Kami meluncurkan platform baru ini pada 29 Agustus 2017. Dalam minggu-minggu berikutnya, kami telah sangat meningkatkan kinerja situs. Kami telah mencapai semua tujuan yang ingin kami capai. Sejak migrasi kami juga mulai membangun banyak hal lainnya. Tim dukungan kami sekarang memiliki waktu yang jauh lebih mudah untuk mengembalikan dana dan mentransfer akun. Kami telah memigrasikan akademi Yoast kami ke multisite. Dan kami memiliki banyak rencana menarik untuk 2018, termasuk:
- Menambahkan toko tempat kami menjual dalam pound Inggris. Berkat pilihan kami sebelumnya dan perpindahan kami ke WooCommerce, kami dapat melakukan ini dalam sehari, hampir tidak memerlukan kode tambahan. Menambahkan dasbor penjualan untuk tim penjualan kami.
- Menambahkan dasbor penjualan untuk tim penjualan kami.
- Menambahkan dukungan Komposer ke plugin premium kami.
WooCommerce telah memberi Yoast landasan teknis untuk membangun dan meningkatkan platform kami ke dekade berikutnya. Apakah Anda mempertimbangkan untuk memigrasi toko web yang ada ke platform lain? Apakah Anda sudah melakukan ini? Bagikan pengalaman Anda di komentar.