WP_Query en functions.php

2

Tengo un código que quiero convertir en una función. Funciona muy bien 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 parece a esto:

function grab_ids_in_category($cat) {
    //stuff from above here
    return $matching_category_ids;
}

¿Qué estoy haciendo mal?

    
pregunta perpetualstudent 25.06.2012 - 19:53

2 respuestas

4

Simple, te estás dirigiendo a $post fuera de contexto.

Cuando está ejecutando un bucle de WordPress estándar, WP cargará una variable global $post con los resultados de la consulta actual. Esto incluye la ID, el título, el contenido, el metadatos posterior, etc. Las funciones de bucle harán referencia a esta variable global para proporcionarle datos.

Tome la función regular get_the_ID() por ejemplo:

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

Su código funcionará bien fuera de una función porque, en algún lugar del código que se encuentra arriba, es probable que esté global elevando la variable $post . Así que su referencia directa a $post->ID funciona.

Pero cuando envuelve este código dentro de una función, no hace referencia a $post como global, por lo que $post->ID no devolverá nada porque local $post no está definido.

En lugar de hacer referencia a $post->ID directamente, use la función de bucle regular get_the_ID() :

while ( $cat_query->have_posts() ) : $cat_query->the_post();
    array_post( $matching_category_ids, get_the_ID() );
endwhile;
    
respondido por el EAMann 25.06.2012 - 20:11
2

Debe agregar la variable global $ post en la función como esta:

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;

}

// echo the Query and pass a category name 
echo grab_ids_in_category('category_name');
    
respondido por el Pontus Abrahamsson 25.06.2012 - 20:15

Lea otras preguntas en las etiquetas