Ask your WordPress questions! Pay money and get answers fast! Comodo Trusted Site Seal
Official PayPal Seal

post__in() array as argument isn't formatted right WordPress

  • SOLVED

I'm building a WP_Query with the following $args:

$args = array(
'post__in' => array (5, 6, 7),
'post_type' => 'listing',
'post_status' => 'publish'
);

$loop = new WP_Query( $args );

****************

Here the 'post__in' has hard coded values in the array. This works fine. But in reality, this list of numbers comes from $_POST

For example, the $_POST['ids'] value is "5, 6, 7".

If my arg is:

'post__in' => array($_POST['ids'])

The array becomes associative, for example:

array([0]=>5 [1]=>6 [2]=>7)

For some reason my app doesn't like this kind of array. It will ONLY work if the array is in the format like: array (5, 6, 7)

I can't figure out how to force the array to be in this simple kind of format.

****************

NOTE: in normal circumstances I can pass an array just fine in the format of array([0]=>5 [1]=>6 [2]=>7), but in this particular case the $args are getting made in AJAX code. (infinite scrolling of WP post results). Again, if the array is hard coded with comma delimited numbers it works fine.

Answers (1)

2016-09-13

dimadin answers:

Try this:


'post__in' => array_map( 'absint', array_values( $_POST['ids'] ) )


Note that you should in any case sanitize input value before querying database with it.


John Buchmann comments:

Thanks for your fast response. But it didn't work....

... that said strangely when I print_r this:

print_r (array($_POST['ids']));

I now get an array like this:

Array ( [0] => 5, 6, 7 )

I'm not sure how before I was getting the different style of array. Anyway, assuming this is what get's output, how to get it in a format like this?

array(5, 6, 7)

Thanks!


dimadin comments:

Could you please var_dump value of $_POST['ids'] without any change, like var_dump( $_POST['ids'] )? It looks like this is a string and explode should be used, we just need to know delimiters, something like:


'post__in' => array_map( 'absint', array_values( explode( ', ', $_POST['ids'] ) ) )


John Buchmann comments:

That code works, thanks so much!!!


Note that if I do this:

print_r (array_map( 'absint', array_values( explode( ', ', $_POST['ids'] ) ) ));

it outputs the array in the "bad" way. But somehow I'm getting the correct output in the WP loop. Strange. Thanks so much!!



John Buchmann comments:

I just awarded you, thx again! And thx for reminder of sanitizing the querystring! :)