วิธีหนึ่งที่เป็นไปได้คือใช้วิธีการช่วยเหลืออย่างใดอย่างหนึ่งในคลาส WPDB เพื่อทำแบบสอบถามที่ใช้เมตาที่ละเอียดกว่า ข้อแม้ที่จะใช้ฟังก์ชั่นเหล่านี้คือคุณไม่ได้รับข้อมูลกลับมาง่ายๆและมักจะต้องทำการอ้างอิงโดยไม่จำเป็นกับคุณสมบัติของวัตถุแม้ว่าคุณจะเรียกใช้เพียงหนึ่งคอลัมน์หรือหนึ่งแถว
แน่นอนว่าไม่ใช่ทุกฟังก์ชั่นที่มีฟังก์ชั่นเหมือนกันและการเอ่ยถึงอย่างเด็ดเดี่ยวไปยังวิธีการของWPDBget_col
ซึ่งจะคืนค่าอาเรย์แบนราบที่เรียบง่ายของข้อมูลที่ถูกสอบถามฉันพูดถึงเรื่องนี้โดยเฉพาะ .
WordPress - WPDB การเลือกคอลัมน์ของข้อมูล
$ wpdb-> get_col ()
นี่คือตัวอย่างฟังก์ชันที่สืบค้นฐานข้อมูลสำหรับโพสต์ทั้งหมดของประเภทโพสต์ที่เลือกสถานะการโพสต์และคีย์เมตาเฉพาะ (หรือฟิลด์ที่กำหนดเองไปยังจิตใจที่มีเทคนิคน้อย)
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;
}
ดังนั้นสำหรับตัวอย่างเช่นถ้าคุณต้องการที่จะหาที่โพสต์มีคีย์เมตาของคะแนนสำหรับประเภทโพสต์ภาพยนตร์และคุณต้องการที่จะเก็บข้อมูลที่อยู่ภายในตัวแปรตัวอย่างของการเรียกร้องดังกล่าวจะเป็น ..
$movie_ratings = get_meta_values( 'rating', 'movies' );
หากคุณไม่ต้องการทำอะไรมากไปกว่าการพิมพ์ข้อมูลนั้นไปยังหน้าจอฟังก์ชั่น implode ของ PHP สามารถแยกอาร์เรย์ที่เรียบง่ายออกเป็นบรรทัดของข้อมูลได้อย่างรวดเร็ว
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
คุณยังสามารถใช้ข้อมูลที่ส่งคืนเพื่อคำนวณจำนวนโพสต์ที่มีค่าเมตาเหล่านี้โดยทำการวนซ้ำแบบง่าย ๆ กับข้อมูลที่ส่งคืนและสร้างอาร์เรย์ของจำนวนตัวอย่างเช่น
$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.
*/
ตรรกะนี้สามารถนำไปใช้กับข้อมูลประเภทต่างๆและขยายการทำงานได้หลายวิธี ดังนั้นฉันหวังว่าตัวอย่างของฉันจะมีประโยชน์และเรียบง่ายพอที่จะติดตาม