Một cách tiếp cận có thể là sử dụng một trong các phương thức của trình trợ giúp trong lớp WPDB để thực hiện một truy vấn dựa trên meta được tinh chỉnh hơn. Tuy nhiên, lưu ý khi sử dụng một số chức năng này là bạn thường không lấy lại được một mảng dữ liệu đơn giản và thường phải thực hiện các tham chiếu không cần thiết đến các thuộc tính đối tượng, ngay cả khi bạn chỉ gọi một cột hoặc hàng.
Tất nhiên, không phải tất cả các hàm đều giống nhau và một đề cập có chủ đích đi ra phương thức WPDB , get_col
nó trả về một mảng phẳng đơn giản của dữ liệu được truy vấn, tôi thực hiện đề cập này một cách cụ thể bởi vì ví dụ sau sẽ gọi phương thức này .
WordPress - WPDB Chọn một cột dữ liệu
$ wpdb-> get_col ()
Đây là một chức năng ví dụ truy vấn cơ sở dữ liệu cho tất cả các bài đăng của loại bài đăng đã chọn, trạng thái bài đăng và với một khóa meta cụ thể (hoặc trường tùy chỉnh theo ý ít kỹ thuật hơn).
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;
}
Vì vậy, ví dụ, nếu bạn muốn tìm ra bài đăng nào có khóa meta xếp hạng , đối với phim loại bài đăng và bạn muốn lưu trữ thông tin đó bên trong một biến, một ví dụ về cuộc gọi như vậy sẽ là ..
$movie_ratings = get_meta_values( 'rating', 'movies' );
Nếu bạn không muốn làm gì hơn là in dữ liệu đó ra màn hình, hàm implode của PHP có thể nhanh chóng ghép mảng đơn giản đó thành các dòng dữ liệu.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Bạn cũng có thể sử dụng dữ liệu được trả về để tìm ra có bao nhiêu bài đăng có các giá trị meta này bằng cách thực hiện một vòng lặp đơn giản trên dữ liệu được trả về và xây dựng một mảng các số đếm, ví dụ.
$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.
*/
Logic này có thể được áp dụng cho các loại dữ liệu khác nhau và được mở rộng để hoạt động với bất kỳ số lượng các cách khác nhau. Vì vậy, tôi hy vọng các ví dụ của tôi đã hữu ích và đủ đơn giản để làm theo.