2

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

2 Answers 2

4

Try to replace

$id[$counter] = get_the_id();

with

array_push( $id, get_the_ID() );

to collect the post id's into the $id array.

Update:

If you also use $ids instead of $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;
4
  • not working. It is still acting like $id is not an array. Commented Jul 22, 2013 at 13:53
  • what if you use $ids instead of $id ? Commented Jul 22, 2013 at 14:05
  • working ... there must have been some sort of interference with wordpress variables Commented Jul 22, 2013 at 14:09
  • ok great, must have been some interference, you could try var_dump($id) check it before and after. Commented Jul 22, 2013 at 14:11
1

While @birgire's answer solves the problem, it does not explain it. $id[$counter] = get_the_id(); should work but in this case triggers a Warning that you cannot use a scalar value as an array. Why?

the_post runs setup_postdata, which sets $id to the post ID, overwriting your $id and turning it into an integer. You can see that by adding var_dump after the_post(), like this:

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

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.

$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;

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.