Cara Saya Memigrasikan Situs WordPress ke Lesstruct: Panduan Praktis

Sepuluh tahun lalu, pada tahun 2016, seorang teman meminta saya membuat aplikasi web dengan konsep yang menarik: siapa pun bisa mendaftar sebagai jurnalis, influencer, atau kreator konten lainnya. Admin akan meninjau dan menyetujui atau menolak setiap pendaftaran. Penulis yang disetujui kemudian dapat mengirimkan postingan atau artikel yang menjelaskan bagaimana mereka membahas produk teman saya di situs web atau media sosial mereka sendiri.
Setiap kiriman melewati langkah persetujuan lain. Setelah diterima, kiriman mendapat skor 1 hingga 3 berdasarkan kualitas konten. Sistem menggunakan skor tersebut untuk memberi peringkat penulis berdasarkan bulan, tahun, dan sepanjang masa, serta dapat mengekspor data penulis, terutama poin, ke CSV. Teman saya kemudian memberi hadiah kepada penulis dengan peringkat teratas. Singkatnya, ini adalah gamifikasi untuk penulisan artikel.
Itulah inti bisnisnya. Operasi sebenarnya memiliki lebih banyak komponen, tetapi ini menangkap alur inti dan bagaimana akhirnya saya menyelesaikannya dengan Lesstruct. Mari kita mulai.
Saya memilih WordPress dan membeli tema premium untuk mewujudkannya. Tema saja tidak cukup, dan teman saya awalnya tidak puas, jadi saya memperluasnya dengan child theme dan plugin khusus.
Berikut plugin utama yang saya gunakan:
Advanced Custom Fields: untuk membuat custom field untuk postingan, hal yang umum dalam proyek WordPress khusus.
Custom Post Type UI: untuk membuat custom post type dengan antarmuka visual, hal umum lainnya di WordPress.
Elementor: pembuat situs web dan halaman dengan drag-and-drop.
ProfilePress: untuk persetujuan pendaftaran dan foto profil pengguna.
Yoast SEO: untuk menyesuaikan judul, slug, dan deskripsi meta saat admin membutuhkannya.
Saya mengandalkan plugin untuk pekerjaan teknis yang berat, tetapi saya tidak akan membahas kodenya di sini, ini tentang bisnisnya.
Advanced Custom Fields

Saya mengelompokkan custom field ke dalam dua grup untuk artikel dan pengguna: Private dan Public. Field Private dikhususkan untuk data admin saja, tidak terlihat oleh pengguna biasa.
Custom Post Type UI

Custom Post Type UI memudahkan pendaftaran custom post type melalui antarmuka visual. Saya menggunakannya untuk membuat post type attendance untuk mencatat siapa yang hadir di acara. Melihat ke belakang, fitur itu adalah desain yang buruk, sistem kehadiran terpisah akan lebih baik. Namun, saat itu saya tidak tahu cara menghubungkan data tersebut kembali ke pengguna, jadi saya mengambil rute paling sederhana: di WordPress, tipe entri baru sama dengan custom post type baru. Itu keputusan cepat yang akan saya lakukan secara berbeda hari ini.
Elementor

Elementor bisa dibilang plugin paling berharga dalam proyek ini. Ini memberi kami pembuatan halaman drag-and-drop dengan pratinjau langsung. Teman saya butuh latihan agar nyaman, tetapi setelah menguasainya, mudah digunakan. Kekurangannya: halaman dimuat dengan lambat, dan fitur lengkapnya tidak tersedia di versi gratis.
ProfilePress

Saya memilih ProfilePress terutama untuk persetujuan pendaftaran dan foto profil pengguna. Saya mengira WordPress bisa menanganinya dengan konfigurasi minimal, tetapi bahkan hal-hal dasar ini memerlukan plugin, dan plugin ini hadir dengan fitur yang jauh lebih banyak dari yang saya butuhkan.
Yoast SEO

Saya memasang Yoast untuk berjaga-jaga jika teman saya ingin menyesuaikan deskripsi meta. Itu membawa banyak opsi tambahan yang tidak kami pahami sepenuhnya, dan pada akhirnya kami jarang menggunakannya.
Masalah
Setelah sepuluh tahun, kami menghadapi beberapa masalah produksi.
Penyimpanan disk cepat penuh. Gambar disimpan dalam format aslinya dan digandakan ke berbagai ukuran, dan tema premium menghasilkan lebih banyak ukuran lagi.
Sistem peringkat menjadi lambat untuk dimuat dan dibuat. Menghitung peringkat secara langsung (on the fly) adalah kesalahan saya, dan ekspor CSV juga mengalami masalah yang sama.
Itulah dua masalah utama. Ada juga kekhawatiran tentang kecepatan halaman, tetapi itu bukan masalah inti bisnis.
Saya sebenarnya bisa memperbaiki masalah peringkat dengan menghitung ulang setelah setiap postingan diterbitkan, tetapi dengan sekitar satu juta artikel, itu akan menjadi usaha yang sangat besar.
Lesstruct
Setelah satu dekade, saya memutuskan untuk merombak situs dengan memigrasikannya ke Lesstruct untuk jangka panjang. Berikut alasannya:
Perusahaan di balik tema premium WordPress yang saya beli bangkrut, sehingga pembaruan berhenti datang. Bukannya kami sangat membutuhkannya, tetapi itu adalah tanda yang jelas.
Lesstruct dibangun dengan GoLang, yang membuatnya sangat cepat dan menghilangkan kebutuhan akan
php-fpm.Lesstruct memiliki custom field, post type, dan peran pengguna bawaan. Tidak ada lagi ketergantungan plugin, semuanya ada dalam satu file
config.toml. Itu saja sudah menjadi fitur yang luar biasa.Pendaftaran dan persetujuan konten tersedia secara default di Lesstruct. Cukup aktifkan di
config.toml, tanpa plugin.Lesstruct tidak menyertakan pembangun halaman drag-and-drop, tetapi menawarkan editor WYSIWYG, HTML, dan CSS yang kaya. Perlu halaman yang rumit? Tanyakan pada asisten AI bawaan, cukup bawa kunci API sendiri.
Lesstruct menyertakan fitur impor WordPress bawaan yang bahkan dapat membawa custom field dan gambar. Halaman Elementor lebih rumit, karena disimpan sebagai entri terpisah. Jadi saya menggunakan AI untuk membangun migrasi khusus yang mengubah halaman Elementor tersebut menjadi HTML/CSS.
Lesstruct merender di sisi server secara default, jadi saya tidak perlu proyek front-end terpisah seperti yang biasanya dilakukan dengan CMS headless, saya hanya perlu mengubah tema lama menjadi tema Lesstruct. Untuk halaman Elementor, saya membuat templat khusus yang dinamai seperti <custom-post-type>_<slug>.html.
Ekspor CSV dulunya adalah menu khusus di panel admin WordPress. Di sistem baru, saya menulis skrip Python khusus untuk mengekspor data ke CSV. Karena peringkat dan poin bersifat publik, skrip ini dijalankan secara manual sebulan sekali.
Saya juga menulis skrip shell untuk mengecilkan (minify) stylesheet:
#!/bin/bash
set -e
THEME_DIR="$(cd "$(dirname "$0")/.." && pwd)"
STATIC_DIR="$THEME_DIR/static"
echo "=== Building theme assets ==="
# Minify CSS (versioning handled by core's {{assetURL}})
if [ -f "$STATIC_DIR/style.src.css" ]; then
minify -o "$STATIC_DIR/style.css" "$STATIC_DIR/style.src.css"
echo "Minified style.src.css -> style.css ($(wc -c < "$STATIC_DIR/style.css") bytes)"
else
echo "ERROR: style.src.css not found"
exit 1
fi
echo "=== Done ==="Secara total, saya akhirnya menulis hanya satu plugin Lesstruct khusus untuk menghitung poin dan peringkat penulis secara langsung (on the fly).
Artikel Terkait
- Belajar Dasar GoLang
- ThinkPad T14 dengan Linux
- 6 Laptop Terbaik untuk Programmers
- 5 Laptop Terbaik untuk Murid Pemrograman