Jednym z możliwych podejść byłoby użycie jednej z metod pomocniczych w klasie WPDB do wykonania bardziej dopracowanego zapytania opartego na meta. Warunkiem korzystania z niektórych z tych funkcji jest jednak to, że zwykle nie odzyskujesz prostej tablicy danych i zwykle musisz robić niepotrzebne odwołania do właściwości obiektu, nawet jeśli wywołujesz tylko jedną kolumnę lub wiersz.
Oczywiście nie wszystkie funkcje są takie same, a celowa wzmianka trafia do metody WPDB , get_col
która zwraca prostą płaską tablicę danych , o które pytamy. Podaję tę informację konkretnie, ponieważ poniższy przykład wywoła tę metodę .
WordPress - WPDB Wybieranie kolumny danych
$ wpdb-> get_col ()
Oto przykładowa funkcja, która wysyła zapytanie do bazy danych dla wszystkich postów wybranego typu postu, statusu postu i określonego meta klucza (lub pola niestandardowego dla mniej technicznie nastawionych).
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;
}
Na przykład, jeśli chcesz dowiedzieć się, które posty mają meta klucz oceny , w przypadku filmów typu post i chcesz przechowywać te informacje w zmiennej, przykładem takiego połączenia może być ...
$movie_ratings = get_meta_values( 'rating', 'movies' );
Jeśli nie chcesz nic więcej robić niż wydrukować te dane na ekranie, funkcja implode PHP może szybko podzielić tę prostą tablicę na linie danych.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Możesz również użyć zwróconych danych, aby dowiedzieć się, ile wpisów ma te meta wartości, wykonując na przykład prostą pętlę nad zwróconymi danymi i budując tablicę zliczeń.
$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.
*/
Ta logika może być zastosowana do różnych rodzajów danych i rozszerzona na wiele różnych sposobów. Mam więc nadzieję, że moje przykłady były pomocne i wystarczająco proste do naśladowania.