Muhtemel bir yaklaşım, WPDB sınıfındaki yardımcı yöntemlerden birinin daha rafine meta tabanlı bir sorgu yapmak için kullanılmasıdır. Bununla birlikte, bu işlevlerden bazılarını kullanmanın uyarısı, genellikle basit bir veri dizisini geri almamanız ve yalnızca bir sütun veya satır çağırıyor olsanız bile, genellikle nesne özelliklerine gereksiz referanslar yapmanız gerekmesidir.
Tabii ki, tüm fonksiyonlar aynı değil ve aynıdır ve sorgulanan verinin basit bir düz dizisini döndüren WPDB yöntemine bilerek yapılan bir işlem söz konusudurget_col
; .
WordPress - WPDB Bir veri sütunu seçme
$ wpdb-> get_col ()
İşte veri tabanını seçilen bir yazı tipi, yazı durumu ve belirli bir meta anahtar (ya da teknik olarak daha az fikirli olan özel bir alan) ile tüm yazı tipleri için sorgulayan bir örnek fonksiyon.
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;
}
Örneğin, hangi yazıların bir derecelendirme anahtarına sahip olduğunu bulmak istiyorsanız , yazı tipi filmler için ve bu bilgiyi değişken içinde saklamak istiyorsanız, böyle bir çağrı örneği olacaktır.
$movie_ratings = get_meta_values( 'rating', 'movies' );
Bu verileri ekrana yazdırmaktan başka bir şey yapmak istemiyorsanız, PHP'nin implode işlevi bu basit diziyi hızlı bir şekilde veri satırlarına ekleyebilir.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
Döndürülen veriler üzerinde basit bir döngü yaparak ve sayımların bir dizisini oluşturarak, bu meta değerlerinin kaç yazının olduğunu bulmak için döndürülen verileri de kullanabilirsiniz.
$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.
*/
Bu mantık, çeşitli verilere uygulanabilir ve birçok farklı şekilde çalışmak üzere genişletilebilir. Bu yüzden, örneklerimin izleyebilecek kadar basit ve basit olduğunu umuyorum.