Одним із можливих підходів було б використання одного з допоміжних методів у класі WPDB для виконання більш вдосконаленого мета-запиту. Але застереження щодо використання деяких з цих функцій полягає в тому, що зазвичай не отримують простий масив даних і зазвичай доводиться робити непотрібні посилання на властивості об'єкта, навіть якщо ви викликаєте лише один стовпець або рядок.
Звичайно, не всі функції є одними і тими ж, і цілеспрямована згадка виходить до методу WPDB , get_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' );
Якщо ви хотіли нічого більше, ніж надрукувати ці дані на екран, функція імплодизації 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.
*/
Ця логіка може бути застосована до різного роду даних і розширена для роботи будь-якою кількістю різних способів. Тож я сподіваюся, що мої приклади були корисними та простими для наслідування.