WP_Query en functions.php

25 jun 2012, 20:53:35
Vistas: 19.9K
Votos: 4

Tengo un código que quiero convertir en una función. Funciona perfectamente hasta que lo envuelvo en dicha función:

    $args = array(
        'posts_per_page'    =>  -1,
        'post_type'         =>  'asset',
        'category_name'     =>  $cat
    );
    $cat_query = new WP_Query( $args );
    $matching_category_ids = array();       
    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID);
    endwhile;

La función se ve algo así:

function grab_ids_in_category($cat) {
    // contenido de arriba aquí
    return $matching_category_ids;
}

¿Qué estoy haciendo mal?

0
Todas las respuestas a la pregunta 2
0

Es simple, estás accediendo a $post fuera de contexto.

Cuando ejecutas un bucle estándar de WordPress, WP carga una variable global $post con los resultados de la consulta actual. Esto incluye el ID, título, contenido, metadatos, etc. Las funciones del bucle hacen referencia a esta variable global para proporcionarte los datos.

Tomemos como ejemplo la función regular get_the_ID():

function get_the_ID() {
    global $post;
    return $post->ID;
}

Tu código funcionará bien fuera de una función porque, en algún lugar del código anterior, probablemente estás declarando como global la variable $post. Por eso tu referencia directa a $post->ID funciona.

Pero cuando envuelves este código dentro de una función, no estás haciendo referencia a $post como global, por lo que $post->ID no devolverá nada porque la variable local $post no está definida.

En lugar de referenciar directamente $post->ID, usa la función estándar del bucle get_the_ID():

while ( $cat_query->have_posts() ) : $cat_query->the_post();
    array_post( $matching_category_ids, get_the_ID() );
endwhile;
25 jun 2012 21:11:19
0

Debes agregar la variable global $post dentro de la función de esta manera:

function grab_ids_in_category($cat) {

    global $post;

    $args = array(
        'posts_per_page'    =>  -1,
        'post_type'         =>  'asset',
        'category_name'     =>  $cat
    );

    $cat_query = new WP_Query( $args );

    $matching_category_ids = array();

    while ( $cat_query->have_posts() ) : $cat_query->the_post();
        array_push($matching_category_ids, $post->ID);
    endwhile;

    return $matching_category_ids;

}

// imprime la Query y pasa un nombre de categoría
echo grab_ids_in_category('nombre_de_categoria');
25 jun 2012 21:15:22