Almacenar bucle en una matriz

2

Estoy utilizando el siguiente código para almacenar los ID de las publicaciones en una matriz:

<?php
    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page' => 5,
        'orderby' => 'date',
        'order' => 'desc');
$id = array();
$counter = 1;       
$products = new WP_Query( $args );
if ( $products->have_posts() ) : while ( $products->have_posts() ) : $products->the_post();
    $id[$counter] = get_the_id();
    //custom_shop_array_create($product, $counter);
    $counter++;
endwhile;
endif;
?>

Sin embargo, no funciona porque si pongo print_r($id) después de endif, solo imprime la ID de la última publicación. ¿Dónde estoy cometiendo un error?

Gracias en adelante

    
pregunta horin 22.07.2013 - 15:38

2 respuestas

4

Intenta reemplazar

$id[$counter] = get_the_id();

con

array_push( $id, get_the_ID() );

para recopilar los ID de publicación en la matriz $id .

Actualización:

Si también usa $ids en lugar de $id :

    $args = array(
        'post_type' => 'product',
        'post_status' => 'publish',
        'ignore_sticky_posts'   => 1,
        'posts_per_page' => 5,
        'orderby' => 'date',
        'order' => 'desc');
$ids = array();
$products = new WP_Query( $args );
if ( $products->have_posts() ) : 
    while ( $products->have_posts() ) : $products->the_post();
       array_push( $ids, get_the_ID() );
    endwhile;
endif;
    
respondido por el birgire 22.07.2013 - 15:41
1

Si bien la respuesta de @birgire resuelve el problema, no lo explica. $id[$counter] = get_the_id(); debería funcionar, pero en este caso activa un Warning que no puede usar un valor escalar como una matriz. ¿Por qué?

the_post ejecuta setup_postdata , que establece $id a la ID de publicación, sobrescribiendo su $id y convirtiéndolo en un entero. Puedes ver eso agregando var_dump después de the_post() , como esto:

$products->the_post();
var_dump($id);

Más allá de eso, tu código es demasiado complejo. No necesita el contador (y si ya lo hizo, ya tiene $products->current_post ) y no necesita ninguna función en particular para insertar elementos en la matriz. Todo lo que necesitas hacer es usar una variable que WordPress no esté usando, que es lo que hace que la solución de birgire funcione.

$args = array(
  'post_type' => 'post',
  'post_status' => 'publish',
  'ignore_sticky_posts'   => 1,
  'posts_per_page' => 5,
  'orderby' => 'date',
  'order' => 'desc'
);

$ids = array();  
$products = new WP_Query( $args );
if ( $products->have_posts() ) : 
  while ( $products->have_posts() ) : 
    $products->the_post();
    $ids[] = $post->ID;
    //custom_shop_array_create($product, $counter);
  endwhile;
endif;
    
respondido por el s_ha_dum 22.07.2013 - 17:42

Lea otras preguntas en las etiquetas