Un posible enfoque sería utilizar uno de los métodos de ayuda en la clase WPDB para realizar una consulta basada en meta más refinada. Sin embargo, la advertencia para usar algunas de estas funciones es que, por lo general, no recupera una simple serie de datos y, por lo general, tiene que hacer referencias innecesarias a las propiedades de los objetos, incluso si solo está solicitando una columna o fila.
Por supuesto, no todas las funciones son iguales, y una mención intencional va al método WPDB , get_col
, que devuelve una matriz plana simple de los datos que se solicitan, i haga 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 del tipo de publicación, el estado de la publicación y con una clave meta específica (o campo personalizado para los menos interesados en la técnica).
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 te gusta saber qué publicaciones tienen una meta clave de rating , para el tipo de publicación movies y le gustaría almacenar esa información dentro de una variable, un ejemplo de tal llamada sería ...
$movie_ratings = get_meta_values( 'rating', 'movies' );
Si no quería hacer nada más que imprimir los datos en la pantalla, la función de implosión de PHP puede unir 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 determinar cuántas publicaciones tienen estos valores meta haciendo un simple bucle 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 varias maneras diferentes. Así que espero que mis ejemplos hayan sido útiles y lo suficientemente simples como para seguirlos.