Di Bagian 1 dari seri ini, saya menunjukkan cara menginstal WordPress secara lokal dan cara mengimpor database WordPress ke Vertabelo. Dalam artikel ini, kita akan melihat lebih dekat tabel di database WordPress.
Tinjauan Singkat Model Basis Data WordPress dan Dasbor
Di bagian sebelumnya, saya mengimpor database WordPress ke alat pemodelan database online kami. Sebagai catatan, struktur databasenya adalah sebagai berikut:
Ada beberapa fakta penting tentang model database WordPress yang harus Anda pahami sebelum kita mulai:
- Setiap situs WordPress menggunakan struktur database yang sama persis. Ini berisi 11 tabel dan setiap situs WordPress menggunakannya di latar belakang. Sebagian besar plugin WordPress juga menggunakan database tanpa perubahan dalam model database. Model harus cukup fleksibel untuk mengakomodasi semua plugin yang berbeda. Tentu saja, pembuat plugin dapat menambahkan tabel khusus untuk plugin tertentu jika struktur datanya sangat berbeda atau jika plugin mereka menyimpan data dalam jumlah besar.
- Database WordPress tidak memiliki batasan kunci asing . Ini karena WordPress menggunakan mesin penyimpanan MyISAM, yang tidak mendukung kunci asing. Tabel mengatasi ini dengan memiliki atribut yang menyimpan nilai seperti "kunci asing" yang tidak terhubung, sehingga batasan kunci asing tidak akan diperiksa oleh database. Misalnya,
post_author
atribut diwp_posts
tabel adalah "referensi" ke atribut "ID" diwp_users
meja. - Sebagian besar tabel menggunakan kunci utama kolom tunggal. Mereka hanya diberi nama “ID” (di
wp_users
danwp_posts
tabel), ataumeta_id
/umeta_id
(di tabel meta:wp_postmeta
,wp_commentmeta
danwp_usermeta
), atau kombinasi nama tabel dan akhiran “_id” (semua tabel lainnya). Satu-satunya pengecualian untuk aturan ini adalahwp_term_relationships
tabel, di mana kunci utama terdiri dari dua atribut:object_id
danterm_taxonomy_id
. Atribut yang merupakan primary key atau bagian dari primary key bertipe bigint(20). Kunci utama atribut tunggal juga memiliki properti peningkatan otomatis yang disetel ke “Ya”.
Pos dan Halaman
Alasan utama menggunakan WordPress adalah untuk membuat dan memanipulasi konten dan menyajikannya kepada publik. Untuk itu, WordPress memberi kita dua jenis konten:Halaman dan Pos .
Halaman digunakan untuk menampilkan konten statis . Mereka tidak menggunakan tag atau kategori dan tidak terdaftar berdasarkan tanggal. Juga mereka tidak mengizinkan komentar atau berbagi media sosial. Halaman dapat memiliki subhalaman. Tentang Kami halaman adalah contoh yang baik dari jenis ini.
Sebaliknya, Pos terdaftar berdasarkan tanggal dan dapat diatur menggunakan kategori dan tag . Postingan dapat digunakan di RSS feed, berkat urutan kronologisnya. Posting tidak boleh memiliki "subpost", tetapi komentar dan berbagi media sosial dimungkinkan. Posting pada dasarnya adalah posting blog. Hal ini dapat dimengerti, karena WordPress berevolusi dari platform blogging.
Tabel utama di balik konten di halaman WordPress mana pun disebut wp_posts
:
WordPress menggunakan wp_posts
tabel untuk menyimpan halaman, posting, dan lampiran. Kita dapat melihat tabel ini sebagai inti halaman kita, tempat sebagian besar konten disimpan. Penting untuk menunjukkan bahwa lampiran sebenarnya disimpan di disk dan catatan di wp_posts
tabel menyimpan lebih banyak informasi tentangnya (siapa yang mengunggahnya dan kapan, dll.).
Kolom di wp_posts
tabelnya adalah:
post_author
– referensi kewp_users
tabel, yang menunjukkan penulis postingan.post_date
– tanggal dan waktu saat catatan dimasukkan ke dalam tabel.post_date_gmt
– tanggal dan waktu GMT/UTC saat catatan dimasukkan ke dalam tabel.post_content
– isi postingan yang sebenarnya.post_title
– judul postingan.post_excerpt
– ringkasan konten.post_status
- status posting saat ini. WordPress menggunakan 8 status default:“Terbitkan”, “Masa Depan”, “Draf”, “Tertunda”, “Pribadi”, “Sampah”, “Draf Otomatis”, dan “Mewarisi”.comment_status
– mengaktifkan dan menonaktifkan komentar pada satu posting atau di seluruh halaman. Ada dua kemungkinan nilai:"terbuka" dan "tertutup".ping_status
– mengidentifikasi apakah sebuah pos memungkinkan pingback dan trackback. Sukaicomment_status
, itu hanya dapat berisi nilai "terbuka" dan "tertutup".post_password
– kata sandi yang digunakan untuk melihat postingan (opsional).post_name
– url yang dapat dibaca manusia daripost_title
.to_ping
– daftar URL yang harus dikirimi pingback oleh WordPress, dibatasi oleh “\n”.pinged
– daftar URL yang telah dikirimi pingback oleh WordPress, dibatasi oleh “\n”.post_modified
– tanggal dan waktu terakhir postingan diubah.post_modified_gmt
– tanggal GMT/UTC untukpost_modified
.post_content_filtered
– digunakan oleh plugin untuk men-cache transformasi konten posting yang mahal.post_parent
– mereferensikan postingan induk.guid
– Pengidentifikasi Unik Global untuk sebuah pos; URL permanennya.menu_order
– digunakan untuk pemesanan konten.post_type
- jenis catatan. Ini dapat berisi nilai “posting”, “halaman”, “lampiran”, atau jenis kustom yang ditentukan pengguna.post_mime_type
– jenis file yang diunggah yang ditentukan hanya untuk postingan denganpost_type = attachment
. Itu dapat berisi nilai seperti "gambar", "aplikasi/pdf" dan "aplikasi/msword".comment_count
– jumlah komentar, pingback, dan trackback postingan.
Berikut adalah cuplikan dari wp_posts
tabel setelah saya menambahkan halaman “Tentang Nikola Tesla”:
Saat kita melihat wp_posts
tabel, kita bisa melihat beberapa versi halaman kita. Catatan dengan ID = 1
memiliki post_status = publish
, artinya postingan dapat dilihat oleh semua orang. comment_status = closed
dan ping_status = closed
menunjukkan bahwa komentar dan ping dinonaktifkan untuk postingan ini.
Setiap informasi tambahan tentang posting dan halaman disimpan di wp_postmeta
tabel:
Kolom dalam tabel ini adalah sebagai berikut:
meta_id
– kunci utama tabel.post_id
– referensi kewp_posts
meja.meta_key
– deskripsimeta_value
atribut.meta_value
– nilai sebenarnya yang disimpan.
wp_postmeta
tabel adalah tempat semua informasi yang tidak dapat disimpan di wp_posts
tabel disimpan. Itu disimpan sebagai pasangan nilai-kunci, teknik yang sering disebut nilai-atribut-entitas (EAV). Tabel dapat digunakan oleh plugin untuk kebutuhan khusus.
Taksonomi WordPress
Taksonomi adalah kata mewah yang pada dasarnya mengacu pada pengelompokan hal-hal bersama-sama. WordPress memiliki beberapa taksonomi bawaan untuk mengelompokkan postingan. Misalnya, kategori dan tag adalah taksonomi WordPress bawaan. Anda juga dapat menambahkan taksonomi kustom Anda sendiri ke WordPress.
Taksonomi dan istilahnya disimpan dalam tabel yang disebut wp_terms
, wp_term_taxonomy
, dan wp_term_relationships
.
wp_terms
table menyimpan daftar istilah yang digunakan untuk mengklasifikasikan objek di situs WordPress Anda:
Tabel ini menampung semua nama tag dan kategori, serta istilah dari taksonomi khusus kami. Atributnya adalah sebagai berikut:
term_id
– kunci utama tabel.name
– nama istilahnya.slug
– URLname
.term_group
– digunakan untuk mengelompokkan istilah bersama.
Berikut adalah isi dari situs contoh kami wp_terms
tabel:
Istilah ditetapkan ke taksonomi dengan bantuan wp_term_taxonomy
tabel:
Atribut dalam tabel adalah:
term_taxonomy_id
– kunci utama tabel.term_id
– referensi kewp_terms
meja.taxonomy
– nama taksonomi.description
– deskripsi istilah dalam taksonomi tertentu.parent
– referensi ke istilah induk dalamwp_terms
meja.count
– jumlah objek dalamwp_posts
tabel yang menggunakan istilah ini dalam taksonomi ini.
wp_term_taxonomy
tabel memungkinkan kita untuk menggunakan kembali istilah yang sama di berbagai taksonomi. Perhatikan bahwa catatan di mana term_id = 1
memiliki taxonomy = category
, sedangkan catatan lainnya memiliki taxonomy = post_tag
.
Untuk menghubungkan objek yang disimpan di wp_posts
dan wp_term_taxonomy
tabel, WordPress menggunakan wp_term_relationships
tabel:
Perhatikan bahwa ini adalah satu-satunya tabel dalam model yang memiliki kunci yang terdiri dari lebih dari satu atribut.
wp_term_relationships
tabel memiliki atribut berikut:
object_id
– referensi kewp_posts
meja.term_taxonomy_id
– referensi kewp_term_taxonomy
meja.term_order
– urutan istilah untuk objek tertentu.
Kami memiliki enam catatan di sini yang menghubungkan enam catatan dari wp_term_taxonomy
tabel dengan pos (object_id = 6
).
Komentar dan Pemodelan Data WordPress
Kami berhasil menempatkan beberapa konten di halaman WordPress kami. Itu bagus, tetapi dalam banyak kasus kami ingin mendapatkan umpan balik dari publik. Dan itulah peran fitur komentar.
Untuk melihat komentar pada postingan, kita cukup menggunakan “Leave a comment” atau klik “X Comment” (X adalah singkatan dari jumlah komentar untuk postingan).
Posting pertama kami sudah memiliki satu komentar. Ketika kami mengkliknya, kami akan melihat itu adalah komentar otomatis yang disebabkan oleh pingback. Kami akan menambahkan satu komentar lagi ke postingan itu:
Kami sekarang melihat dua komentar untuk posting kami, tapi apa yang ada di balik semua itu di database?
Anda dapat menebak dari nama tabel bahwa wp_comments
table digunakan untuk menyimpan komentar di halaman WordPress kami:
Atributnya sebagian besar sudah cukup jelas, tetapi kami masih akan melihat lebih dekat beberapa di antaranya.
comment_post_ID
adalah referensi ke wp_posts
meja; itu menunjukkan pos mana yang telah menerima komentar. Untuk komentar pertama, kita dapat melihat bahwa itu sebenarnya pingback dan bahwa "penulis" adalah posting lain. Untuk komentar kedua, kita dapat melihat bahwa saya adalah penulisnya. Perhatikan juga comment_agent
berisi beberapa info dasar tentang sistem dan komputer yang digunakan untuk mengirim komentar.
Ide utama di balik ketiga tabel meta dalam model ini adalah untuk menyimpan data yang tidak ingin kita simpan di tabel utama kita. wp_commentmeta
terkait dengan wp_comments
tabel dengan cara yang sama seperti wp_postmeta
tabel terkait dengan wp_posts
tabel.
Melihat Pengguna WordPress
Setelah halaman kami online, siapa pun dapat melihatnya. Pengguna WordPress adalah orang-orang yang, sesuai dengan status izinnya, dapat melakukan perubahan pada situs kami dan kontennya.
Sekarang kita akan mengintip wp_users
dan wp_usermeta
tabel di database MySQL.
Seperti yang diharapkan, wp_users
tabel yang ditunjukkan di atas menyimpan data dasar untuk semua pengguna yang terdaftar di situs WordPress kami. Perhatikan bahwa user_pass
dienkripsi dan Pengguna Baru memiliki user_activation_key
atribut diisi saat edrkusic mengosongkan bidang itu.
Sedangkan atribut yang tercantum di wp_users
tabel adalah apa yang kami harapkan di situs WordPress mana pun, wp_usermeta
table digunakan untuk menyimpan nilai yang mungkin spesifik untuk proyek tertentu:
Misalnya, perhatikan bahwa catatan dengan umeta_id = 25
mengandung nilai “beberapa info biografis” , teks yang sama yang kita ketik di dasbor saat mengedit Pengguna Baru. user_id
atribut dalam catatan itu memiliki nilai 2 , yang sesuai dengan ID Pengguna Baru di wp_users
meja. Jelas, user_id
adalah referensi ke wp_users
tabel.
Tautan dan Opsi di WordPress
Ide di balik wp_links
tabel adalah untuk menyimpan tautan ke situs lain:
Memiliki link ke situs lain sangat populer di awal era blogging; saat ini digunakan semakin sedikit. Dari WordPress versi 3.5, administrasi tautan bahkan dihapus dari antarmuka admin. Namun, tabel ini disimpan untuk menyediakan kompatibilitas dengan versi yang lebih lama.
wp_options
tabel menyimpan data tentang instalasi WordPress, konfigurasi situs, tema, plugin, dan widget:
Ini juga digunakan untuk menyimpan data cache sementara. Logika EAV juga ada di tabel ini, seperti di wp_usermeta
, wp_postmeta
dan wp_commentmeta
. Atribut option_name
memainkan peran kunci, sedangkan atribut option_value
adalah nilai yang sesuai. Dua atribut lainnya dalam tabel adalah atribut kunci utama option_id
dan autoload
, yang mengontrol apakah opsi dimuat secara otomatis dari database.
Mengevaluasi Model Basis Data WordPress
Model database di belakang WordPress tidak mengikuti beberapa aturan dan konvensi desain database yang baik. Saat kami mendesain database untuk tujuan tertentu, mengetahui semua fungsi yang diinginkan sebelumnya, kami dapat mengikuti semua aturan tersebut. Tetapi WordPress perlu mencakup apa pun yang ada dalam pikiran siapa pun, jadi mengorbankan kunci asing dan menggunakan EAV adalah sesuatu yang harus dilakukan. Saya akan memberi nama atribut ID yang sama di semua tabel, dan melakukan hal yang sama dengan "kunci asing". Misalnya, saya tidak akan menggunakan post_author
di wp_posts
tabel, tapi saya akan tetap menggunakan users_id
. Selain ini, saya harus setuju bahwa database WordPress benar-benar model yang bagus untuk tujuannya.
Bagaimana menurutmu? Beri tahu kami di bagian komentar.