obtener todas las entradas de un tipo de publicación personalizada

28 may 2013, 23:28:01
Vistas: 35.5K
Votos: 12

Estoy tratando de obtener todas las entradas de un tipo de publicación personalizada específico usando el siguiente código:

$auctions = get_posts(array('post_type' => 'auction'));
print_r($auctions);
echo '<select>';
foreach ($auctions as $auction) {
    echo '<option value="' . $auction->ID . '">' . $auction->post_title . '</option>';
}
echo '</select>';

Aunque la llamada print_r() muestra datos, el foreach parece ignorarlos y no imprime nada. ¿Alguna idea?

Cualquier ayuda sería apreciada

Salida de print_r():

Array (
    [0] => WP_Post Object (
        [ID] => 36
        [post_author] => 1
        [post_date] =>    2013-05-19 10:58:45
        [post_date_gmt] => 2013-05-19 08:58:45
        [post_content] =>
        [post_title] => Mi Título
        [post_excerpt] =>
        [post_status] => publish
        [comment_status] => closed
        [ping_status] => closed
        [post_password] =>
        [post_name] => mi-titulo
        [to_ping] =>
        [pinged] =>
        [post_modified] => 2013-05-24 09:55:53
        [post_modified_gmt] => 2013-05-24 07:55:53
        [post_content_filtered] =>
        [post_parent] => 0
        [guid] => http://domain.com/?post_type=auction&p=36
        [menu_order] => 0
        [post_type] => auction
        [post_mime_type] =>
        [comment_count] => 0
        [filter] => raw
    )   
) 
5
Comentarios

¿Qué muestra el print_r( $auctions );? (Agrégalo a tu pregunta; será muy difícil de leer en los comentarios).

Pat J Pat J
28 may 2013 23:38:22

Datos de print_r() añadidos

leemon leemon
28 may 2013 23:45:17

¿Aparece la declaración <select>...</select> en el HTML generado? Si ves el código fuente de tu página, ¿se ve correcto?

Pat J Pat J
28 may 2013 23:51:38

Ups... un error tipográfico que cometí impidió la salida correcta. ¡Gracias de todos modos!

leemon leemon
29 may 2013 00:05:59

@user1991185 ¿ese error tipográfico era el problema y la pregunta está resuelta?

Rarst Rarst
29 may 2013 00:49:51
Todas las respuestas a la pregunta 4
2
14

Puedes usar wp_query() para que esto funcione

$args = array(
        'post_type' => 'auction',
        'posts_per_page' => -1
    );
$query = new WP_Query($args);
if ($query->have_posts()): 
    echo '<select>';
    while ($query->have_posts()): $query->the_post();
            echo '<option value="' . get_the_ID() . '">' . get_the_title() . '</option>';
    endwhile;
    echo '</select>';
    wp_reset_postdata();
endif;

Documentación para WP_Query https://codex.wordpress.org/Class_Reference/WP_Query

7 jun 2019 20:22:54
Comentarios

por favor actualiza el código con wp_reset_postdata(). Hay un error.

Ashish Yadav Ashish Yadav
2 mar 2020 10:09:05

Recibí un error porque falta un punto y coma en la línea 4 (después del array $args). Sería bueno corregirlo.

Arrowcatch Arrowcatch
22 jun 2020 09:07:00
4

Quizás porque get_posts devuelve un objeto, necesitas configurar los datos del post según Códice get_posts. Reemplazando la línea 4:

foreach($auctions as $auction) : setup_postdata($auction) { 
28 may 2013 23:58:27
Comentarios

get_posts() devuelve un array http://codex.wordpress.org/Template_Tags/get_posts#Return_Value, ejecutar setup_postdata se usaría para permitir el uso de etiquetas de plantilla, como the_ID()

Andrew Bartel Andrew Bartel
29 may 2013 00:02:19

Ah, sí, lo veo más abajo en la página. Gracias @AndrewBartel

stellarcowboy stellarcowboy
29 may 2013 00:05:14

Nota que típicamente estos loops son as $post para establecer el global $post o necesita hacerse adicionalmente. setup_postdata() no hace esto.

Rarst Rarst
29 may 2013 00:52:31

Buen hallazgo @Rarst.. es bueno saberlo.

stellarcowboy stellarcowboy
29 may 2013 01:04:06
0

Prueba sin usar get_posts(). Actualmente tengo una función similar que funciona así:

$args = array( 'post_type' => 'customPostName', 'post_status' => 'publish');
$pages = get_pages($args);
foreach ( $pages as $page ) {
    // Hacer algo
    }

Edición: En realidad no estoy seguro de por qué esto no funciona ya que el codex claramente dice usar echo $post->ID; con get_posts. http://codex.wordpress.org/Function_Reference/get_posts#Access_all_post_data

¿Esto hace alguna diferencia para ti?

    foreach ($auctions as $auction) {
        $option = '<option value="';
        $option .= $auction->ID;
        $option .= '">';
        $option .= $auction->post_title;
        $option .= '</option>';

        echo $option;
28 may 2013 23:59:26
0
        'post_type' => 'auction',
        'posts_per_page' => -1,
        'post_status' => 'publish',
    );
$query = new WP_Query($args);
if ($query->have_posts() ) : 
    echo '<select>';
    while ( $query->have_posts() ) : $query->the_post();
            echo '<option value="' . get_the_ID() . '">' . get_the_title() . '</option>';
    endwhile;
    echo '</select>';
    wp_reset_postdata();
endif;

@gregory tenía razón, pero tenía algunos errores tipográficos... Faltaba un ; de cierre en el array y al final reset_postdata(); debe ser wp_reset_postdata();. Esto debería funcionar bien ahora... ¡A mí me funciona perfectamente, sin ningún problema! ¡Espero que esto ayude!

17 dic 2019 19:31:18