将数组从查询字符串添加到WP meta_query

时间:2016-06-03 21:36:25

标签: php arrays wordpress query-string

我将查询字符串中的值作为数组收集。然后收集这些值并将它们放入' meta_query'。

的值

我无法从WP_Query输出任何内容。我觉得'meta_query'中的第二个数组有问题。

我尝试将比较更改为' LIKE',并显示所有内容而不是查询中的内容。

查询字符串:

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

PHP代码:

<?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  );

对此的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:0)

我首先在$ variable_selected上运行一个var_dump,以确保获得所需的数组。此外,由于您只使用一个元键/值字段,因此您可能不需要查询中的OR,因此您可以执行以下操作。希望有所帮助。

<?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 :(得分:0)

这使得meta_query动态,具体取决于查询字符串中的值。

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