0

I am collecting values from a query string as an array. Then collecting those values and placing them into the value of the 'meta_query'.

I am having trouble where nothing gets outputted from the WP_Query. I feel like there is something wrong with the second array in the 'meta_query'.

I have tried to change the compare to 'LIKE', and that shows all the content instead of what is in the query.

Query string:

?variable[]=value1&variable[]=value2

PHP code:

<?php
$variable_selected = $_GET['variable'];

$filter = array(
    'post_type' => 'my_custom_post_type',
    'meta_query' => array(
        'relation' => 'OR',
         array(
            'key' => 'my_post_field',
            'value' => $variable_selected,
            'compare' => 'IN'
            )
        )

    );

    $posts = new WP_Query( $filter  );

Any help on this will be great.

2 Answers 2

0

I would first run a var_dump on $variable_selected to make sure you are getting the array that you need. Also, since you are just using one meta key/value field, you might not need the OR in your query, so you could do something like below. Hope that helps.

<?php
$variable_selected = $_GET['variable'];

// Use the var_dump to test to see if array is being pulled in properly.
var_dump ( $variable_selected );    

$filter = array(
'post_type' => 'my_custom_post_type',
'meta_query' => array(
     array(
        'key' => 'my_post_field',
        'value' => $variable_selected,
        'compare' => 'IN'
        )
    )

);

$posts = new WP_Query( $filter  );
1
  • Thank you for responding, but after checking the variable and getting the array I want, I am still not getting any results. I eliminated the variable all together and placed my array into the meta_query and I am getting the same result, nothing.
    – Mike Boory
    Commented Jun 6, 2016 at 10:57
0

This makes the meta_query dynamic depending on how many values are in the query string.

$meta_query = array();
if ( ! empty( $_GET["variable"] ) ) {
    if ( is_array( $_GET["variable"] ) ) {
        $meta_query['relation'] = 'OR';
        foreach ( $_GET["variable"] as $value ) {
            $meta_query[] = array(
                'key' => 'my_post_field',
                'value' => sanitize_text_field( (string) $value ),
                'compare' => 'LIKE'
            );
        }
    } else {
       $meta_query = array(
            'key' => 'my_post_field',
            'value' => sanitize_text_field( (string) $_GET["variable"] ),
            'compare' => '='
       );
    }
 }
 $filter = array(
    'post_type' => 'my_custom_post_type',
    'meta_query' => array(
       'relation' => 'OR',
       $meta_query
 )
 );
 $posts = new WP_Query( $filter );

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.