Salah satu pendekatan yang mungkin adalah menggunakan salah satu metode pembantu di kelas WPDB untuk melakukan kueri berbasis meta yang lebih disempurnakan. Peringatan untuk menggunakan beberapa fungsi ini, adalah bahwa Anda biasanya tidak mendapatkan kembali array data sederhana dan biasanya harus membuat referensi yang tidak perlu ke properti objek, bahkan jika Anda hanya memanggil satu kolom atau baris.
Tentu saja, tidak semua fungsi adalah satu dan sama, dan penyebutan yang disengaja keluar ke metode WPDB , get_col
yang mengembalikan array datar sederhana dari data yang diminta, saya membuat penyebutan ini secara khusus karena contoh berikut akan memanggil metode ini .
WordPress - WPDB Memilih kolom data
$ wpdb-> get_col ()
Berikut adalah contoh fungsi yang menanyakan database untuk semua posting dari jenis posting yang dipilih, status posting dan dengan kunci meta tertentu (atau bidang khusus untuk yang kurang berpikiran teknis).
function get_meta_values( $key = '', $type = 'post', $status = 'publish' ) {
global $wpdb;
if( empty( $key ) )
return;
$r = $wpdb->get_col( $wpdb->prepare( "
SELECT pm.meta_value FROM {$wpdb->postmeta} pm
LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id
WHERE pm.meta_key = %s
AND p.post_status = %s
AND p.post_type = %s
", $key, $status, $type ) );
return $r;
}
Jadi misalnya, jika Anda ingin mengetahui postingan mana yang memiliki meta key rating , untuk film tipe postingan dan Anda ingin menyimpan informasi itu di dalam suatu variabel, contoh dari panggilan semacam itu adalah ..
$movie_ratings = get_meta_values( 'rating', 'movies' );
Jika Anda ingin melakukan tidak lebih dari mencetak data itu ke layar, fungsi implode PHP dapat dengan cepat membagi array sederhana itu menjadi garis-garis data.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Anda juga dapat menggunakan data yang dikembalikan untuk mengetahui berapa banyak pos memiliki nilai meta ini dengan melakukan loop sederhana di atas data yang dikembalikan dan membangun array jumlah, misalnya.
$movie_ratings = get_meta_values( 'rating', 'movies' );
if( !empty( $movie_ratings ) ) {
$num_of_ratings = array();
foreach( $movie_ratings as $meta_value )
$num_of_ratings[$meta_value] = ( isset( $num_of_ratings[$meta_value] ) ) ? $num_of_ratings[$meta_value] + 1 : 1;
}
/*
Result:
Array(
[5] => 10
[9] => 2
)
// ie. there are 10 movie posts with a rating of 5 and 2 movie posts with a rating of 9.
*/
Logika ini dapat diterapkan untuk berbagai jenis data, dan diperluas untuk bekerja dengan berbagai cara. Jadi saya berharap contoh saya cukup membantu dan sederhana untuk diikuti.