I am using folowing code to store posts ids into array:
<?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;
?>
However it doesnt work because if I put print_r($id)
after endif it only prints id of last post. Where am I making mistake?
Thanks in forward
Try to replace
with
to collect the post id’s into the
$id
array.Update:
If you also use
$ids
instead of$id
:While @birgire’s answer solves the problem, it does not explain it.
$id[$counter] = get_the_id();
should work but in this case triggers aWarning
that you cannot use a scalar value as an array. Why?the_post
runssetup_postdata
, which sets$id
to the post ID, overwriting your$id
and turning it into an integer. You can see that by addingvar_dump
afterthe_post()
, like this:Beyond that, your code is overly complex. You don’t need the counter (and if you did you already have
$products->current_post
) and you don’t need any particular function to push items onto the array. All you really need to do is use a variable that WordPress isn’t already using, which is what makes birgire’s solution work.