Sedikit perbaikan dari jawaban @sMyles.
Saya memiliki kasus di mana ID telah disimpan baik sebagai string (seperti ketika diambil dari input formulir) dan sebagai bilangan bulat (misalnya update_post_meta($post_id, authorized_users', array(get_current_user_id()));
). Ini seperti masalah yang terkenal di wp_set_object_terms()
mana Anda dapat menggunakan ID istilah untuk menetapkan istilah, tetapi jika Anda tidak menjadikannya sebagai bilangan bulat pertama, Anda memiliki peluang 50% untuk membuat istilah baru dengan angka-angka tersebut sebagai namanya sebagai gantinya.
Ini dapat menyebabkan mereka disimpan secara sangat berbeda dalam larik serial, seperti yang dapat dilihat dari cuplikan kasus seperti itu dari basis data situs pengujian saya:
a:1:{i:0;s:1:"1";} // 's' for 'string', also note the double quotes
a:1:{i:0;i:1;} // 'i' for 'integer', no quotes
Kedua hal di atas, ketika diberi makan print_r()
akan membuat sebagai
Array
(
[0] => 1
)
Untuk memperbaikinya, saya membuat sedikit penyesuaian meta_query
dengan menambahkan relation
dan versi lain dari kueri yang melemparkan nilai sebagai integer, bukan string.
Inilah hasil akhirnya:
'meta_query' => array(
'relation' => 'OR', // Lets it know that either of the following is acceptable
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(strval(get_current_user_id())), // Saved as string
'compare' => 'LIKE'
),
array(
'key' => 'bcm_enm_authorized_users',
'value' => serialize(intval(get_current_user_id())), // Saved as integer
'compare' => 'LIKE'
),
),
EDIT: Baru menyadari bahwa metode ini dapat menjalankan risiko tabrakan dengan indeks array, yang dapat memungkinkan seseorang akses ilegal ke materi jika mereka tidak ada dalam array, tetapi ID pengguna mereka muncul sebagai indeks. Dengan demikian, sementara ini berfungsi jika Anda memiliki masalah yang dibahas, praktik yang lebih baik adalah memastikan bahwa nilai apa pun yang ingin Anda cari dilemparkan sebagai string sebelum menyimpannya sehingga Anda dapat menggunakan metode @sMyles sebagai gantinya.