Saltar al contenido

Wordpress: obtener todos los valores para un campo personalizado key (post cruzado)

Este enunciado ha sido evaluado por especialistas así se garantiza la veracidad de nuestro contenido.

Un enfoque posible sería usar uno de los métodos auxiliares en la clase WPDB para realizar una consulta basada en metadatos más refinada. Sin embargo, la advertencia sobre el uso de algunas de estas funciones es que, por lo general, no obtiene una respuesta simple. array de datos y, por lo general, tiene que hacer referencias innecesarias a las propiedades del objeto, incluso si solo solicita una columna o una fila.

Por supuesto, no todas las funciones son las mismas, y se hace una mención intencionada a la WPDB método, get_col que devuelve un plano simple array 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 un meta específico key(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 meta key de clasificación, para el tipo de publicación películas 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 esos datos en la pantalla, la función de implosión de PHP puede empalmar rápidamente ese simple array en líneas de datos.

// Print the meta values seperate by a line break
echo implode( '
', get_meta_values( 'YOURKEY' ));

También puede usar los datos devueltos para calcular cuántas publicaciones tienen estos valores meta haciendo un ciclo simple sobre los datos devueltos y creando un array de los condes, 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 que funcione de muchas maneras diferentes. Así que espero que mis ejemplos hayan sido útiles y lo suficientemente simples como para seguirlos.

Solo me gustaría agregar una pequeña cosa a t31osEl código de arriba. Cambié “SELECCIONAR” a “SELECCIONAR DISTINTO” para eliminar entradas duplicadas cuando usé este código yo mismo.

No es bueno ni necesario usar el $wpdb global:

// function to grab all possible meta values of the chosen meta key.
function get_meta_values( $meta_key,  $post_type = 'post' ) 

    $posts = get_posts(
        array(
            'post_type' => $post_type,
            'meta_key' => $meta_key,
            'posts_per_page' => -1,
        )
    );

    $meta_values = array();
    foreach( $posts as $post ) 
        $meta_values[] = get_post_meta( $post->ID, $meta_key, true );
    

    return $meta_values;



$meta_values = get_meta_values( $meta_key, $post_type );

Si estás de acuerdo, eres capaz de dejar una reseña acerca de qué le añadirías a este artículo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *