Evitar usar un bucle para acceder a una sola publicación

4

A veces quiero acceder a un CPT particular para extraer algo de él, por ejemplo, un valor de campo personalizado:

$group = new WP_Query( array( 
    'post_type' => 'group',
    'p' => $group_id
) );
while ( $group->have_posts() ) : $group->the_post();
    $group_type = get_post_meta($post->ID, "group_type", $single = true);       
endwhile;

Sin embargo, el propósito de un bucle es acceder a más de un elemento, por lo que no me gusta usar un bucle para una sola publicación. ¿Hay una manera de hacer exactamente lo mismo (acceder a este valor de campo personalizado) sin usar un bucle?

    
pregunta drake035 26.01.2013 - 11:42

3 respuestas

1

¿qué hay de get_post ?

$post       = get_post( $p );
$group_type = get_post_meta( $post->ID, 'group_type', true );
    
respondido por el Simon Blackbourn 26.01.2013 - 17:52
3

Su objeto WP_Query contiene una matriz de publicaciones. Solo toma la primera entrada:

get_post_meta( $group->posts[0]->ID, "group_type", true );

Nota: el tercer parámetro para get_post_meta() espera una palabra clave: true o false , no $single = true . Funciona, pero parece bastante extraño. :)

    
respondido por el fuxia 26.01.2013 - 11:49
0

Puedes usar solo la mitad de un bucle. Bueno, ni siquiera es un bucle, solo el cheque si recibimos alguna publicación. Simplemente use los métodos de objetos (WP_Query). El ejemplo lo envuelve en una función, por lo que incluso podría usarlo como Etiqueta de plantilla:

function wpse83212_get_group_post( $group_id )
{
    add_filter( 'post_limits', 'wpse83212_group_post_limit' );
    $group = new WP_Query( array( 
         'post_type' => 'group'
        ,'p'         => $group_id
    ) );
    // Did the query return anything?
    if ( $group->have_posts() )
    {
        // Setup the post data
        $group->the_post();
        // Now we have access to the '$GLOBALS['post']' object
        // as well as to any functions that only work inside the Loop:
        return get_post_meta( get_the_ID(), 'group_type', true );
    }
    else
    {
        return NULL;
    }
}
function wpse83212_group_post_limit( $limit )
{
    remove_filter( current_filter(), __FUNCTION__, 10 );
    return 1;
}

Luego simplemente úselo en cualquier plantilla: $group_meta = wpse83212_get_group_post( 12 ); . Si el valor ahora es NULL , no hubo tal publicación. De lo contrario, obtendrías el único valor devuelto.

    
respondido por el kaiser 26.01.2013 - 13:22

Lea otras preguntas en las etiquetas