Saya memiliki fungsi yang menyimpan status "suka" untuk pos sebagai pos meta. Saya ingin mengaitkan "suka" itu dengan pengguna yang menyukainya, jadi saya menyiapkan bidang khusus yang disebut "like_status_ {user_id}" (di mana {user_id} adalah id dari pengguna yang saat ini masuk) yang saya simpan sebagai 0 atau 1. Jadi untuk posting dengan beberapa "suka" akan ada beberapa nilai meta di db yang diatur seperti ini:
'meta_key' = 'like_status_0'
'meta_value' = 1
'meta_key' = 'like_status_2'
'meta_value' = 1
'meta_key' = 'like_status_34'
'meta_value' = 1
....dan seterusnya.
Ada ribuan kemungkinan suka pada posting tertentu. Bagaimana saya menjalankan kueri yang menunjukkan jika orang lain juga menyukai posting itu?
Saya sedang memikirkan sesuatu seperti ini:
$query = new WP_Query(array(
'meta_key' => 'like_status_{user_id}',
'meta_value' => 1,
));
Saya mencoba untuk mendorong pemberitahuan kepada semua orang yang menyukai posting ketika orang lain menyukai posting itu ... sesuatu seperti, "Hei, orang lain menyukai posting yang Anda sukai. Anda harus memeriksanya!" Tetapi saya perlu cara untuk mengetahui apakah ada orang lain yang menyukai pos itu dan jika demikian, siapa mereka sehingga saya bisa memberi tahu mereka.
Jika tidak memungkinkan, dapatkah Anda menyarankan cara yang lebih baik untuk menyimpan data ini sebagai post_meta sambil tetap menjaga efisiensi dengan cepat memperbarui status suka pengguna tunggal pada posting?
Cukup sulit untuk menjawab pertanyaan Anda secara konkret. Namun, bagian pertama mudah. Baru-baru ini saya melakukan sesuatu yang mirip pada stackoverflow
Kunci meta dibandingkan dan sama persis.
WP_Query
tidak memiliki cara untuk menyesuaikan perilaku ini dengan parameter sederhana, tetapi kami selalu dapat memperkenalkannya sendiri dan kemudian menyesuaikanposts_where
klausa untuk melakukanLIKE
perbandingan pada kunci meta.FILTER
Ini hanya filter dasar, sesuaikan sesuai kebutuhan.
Seperti yang Anda lihat, filter hanya diaktifkan ketika kami mengatur parameter khusus kami yang baru,
wildcard_on_key
menjaditrue
. Ketika ini memeriksa, kami hanya mengubah=
pembanding keLIKE
pembandingHanya catatan tentang ini,
LIKE
perbandingan secara inheren lebih mahal untuk menjalankan perbandingan lainnyaQUERY THE
Anda dapat dengan mudah meminta posting Anda sebagai berikut untuk mendapatkan semua posting dengan kunci meta
like_status_{user_id}
PERTANYAAN LAIN
Bidang khusus tidak berdampak pada kinerja, Anda dapat membaca posting saya tentang subjek ini di sini . Namun saya merasa terganggu dengan Anda mengatakan bahwa setiap posting dapat memiliki ratusan atau ribuan suka. Ini dapat memberi Anda kinerja yang mendapatkan dan menyimpan banyak data lapangan khusus dalam jumlah besar. Ini juga dapat menyumbat db Anda dengan sejumlah besar data bidang khusus yang tidak perlu yang membuatnya cukup sulit untuk dipelihara.
Saya bukan penggemar yang sangat besar dalam menyimpan data serial di bidang kustom karena orang tidak dapat mencari atau memesan dengan data serial. Namun saya sarankan menyimpan semua ID pengguna dalam array di bawah satu bidang khusus. Anda cukup memperbarui array dengan ID pengguna ketika pengguna menyukai posting. Mendapatkan data bidang khusus dan mengulang larik ID dan melakukan sesuatu dengan ID itu mudah. Lihat saja
get_post_meta()
Memperbarui bidang khusus juga mudah. Untuk itu, Anda perlu melihat ke dalam
update_post_meta()
, saya tidak tahu bagaimana Anda membuat bidang khusus Anda, tetapiupdate_post_meta()
pasti sesuatu yang ingin Anda gunakan.Jika Anda perlu mengirim email atau pemberitahuan push ketika bidang khusus diperbarui, Anda memiliki kait berikut yang bisa digunakan. ( Lihat
update_metadata()
konteksnya )update_postmeta
memperbarui _ {$ meta_type} _meta
updated_postmeta
perbarui _ {$ meta_type} _meta
perbarui _ {$ meta_type} _metadata
KESIMPULAN
Tepat sebelum saya memposting ini, sekali lagi, sebelum Anda pergi rute serial, pastikan bahwa Anda tidak perlu mengurutkan berdasarkan data yang diurutkan atau mencari data tertentu di dalam data serial.
sumber
Sejak wordpress 5.1 sekarang dimungkinkan untuk menggunakan meta query seperti:
sumber
Jika nanti Anda ingin memperpanjang ini, dengan statistik, fitur, dll yang lebih rinci, maka alternatif lain bisa berupa: tabel khusus
pro : Disesuaikan dengan kebutuhan Anda dan dapat diindeks untuk kinerja yang lebih baik.
kontra : Lebih banyak pekerjaan
Mungkin juga ada solusi menggunakan taksonomi kustom, yang bisa memberikan kinerja kueri yang lebih baik daripada mengirim meta queries, karena cara tabel inti diindeks.
Tidak yakin jenis pemberitahuan apa yang Anda maksud di sini, tetapi ini dapat dengan cepat menjadi besar.
Contoh : Seorang pengguna yang suka ~ 1000 posting dan setiap posting mendapat ~ 1000 suka, maka ada 1M notifikasi di pipa, hanya untuk pengguna itu! Jika ini pemberitahuan email maka penyedia host mungkin tidak senang dan pengguna akan menjadi gila. Itu mungkin juga mahal dengan layanan email pihak ke-3.
sumber
Per dokumentasi WP_Meta_Query Anda dapat menggunakan
compare
argumen dalammeta_query
argumen WP_Query. Namun, Anda hanya dapat membandingkan padavalue
dan bukankey
sehingga Anda mungkin ingin memikirkan kembali bagaimana Anda menyusun ini.Sebuah
like
Argumen akan terlihat seperti ini:Mengingat Anda tidak dapat melakukan pencarian 'LIKE' di
key
Saya sarankan Anda menambahkan posting yang disukai di meta pengguna dan melakukan pencarian WP_User_Query untuk pengguna yang menyukai posting itu:sumber