Un enfoque posible sería utilizar uno de los métodos auxiliares en la clase WPDB para hacer una consulta meta basada más refinada. Sin embargo, la advertencia del uso de algunas de estas funciones es que, por lo general, no se obtiene una matriz simple de datos y, por lo general, se deben hacer referencias innecesarias a las propiedades de los objetos, incluso si solo se solicita una columna o fila.
Por supuesto, no todas las funciones son iguales, y se hace una mención intencional al método WPDB , get_col
que devuelve una simple matriz plana de los datos consultados, hago esta mención específicamente porque el siguiente ejemplo recurrirá a este método .
WordPress - WPDB Seleccionando una columna de datos
$ wpdb-> get_col ()
Aquí hay una función de ejemplo que consulta la base de datos para todas las publicaciones de un tipo de publicación elegido, estado de publicación y con una metaclave específica (o campo personalizado para los menos técnicos).
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;
}
Entonces, por ejemplo, si desea averiguar qué publicaciones tienen una metaclave de calificación , para las películas de tipo de publicación y desea almacenar esa información dentro de una variable, un ejemplo de dicha llamada sería ...
$movie_ratings = get_meta_values( 'rating', 'movies' );
Si no desea hacer nada más que imprimir esos datos en la pantalla, la función de implosión de PHP puede empalmar rápidamente esa simple matriz en líneas de datos.
// Print the meta values seperate by a line break
echo implode( '<br />', get_meta_values( 'YOURKEY' ));
También puede usar los datos devueltos para calcular cuántas publicaciones tienen estos meta valores haciendo un bucle simple sobre los datos devueltos y creando una matriz de los recuentos, por ejemplo.
$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.
*/
Esta lógica podría aplicarse a varios tipos de datos y extenderse para funcionar de muchas maneras diferentes. Así que espero que mis ejemplos hayan sido útiles y lo suficientemente simples como para seguirlos.