WordPress:将数据循环到WP_meta_query的数组中

时间:2015-05-19 17:54:27

标签: php arrays wordpress

我想创建一个循环来创建一个请求WP_meta_query(来源:https://codex.wordpress.org/Class_Reference/WP_Meta_Query),但我很难得到预期的结果。

以下是上下文:人们可以搜索搜索表单中的帖子。我还通过magic-field-2插件在帖子上设置了自定义字段。当人们搜索时,他们可以写一些东西并检查一些复选框以获得更准确的结果。

我发现管理此操作的最简单方法是从搜索中提取数据并执行WP_meta_query以找到我需要的内容。

此类搜索的实际语法如下所示:

query_args = array( 'meta_query' => array(
    'relation' => 'OR',
    array(
        'key' => 'foo_key',
        // 'value' => 'foo',
        // 'compare' => 'LIKE',
    ),
    array(
        'key' => 'bar_key',
    ),
) );
$meta_query = new WP_Meta_Query();
$meta_query->parse_query_vars( $query_args );
$mq_sql = $meta_query->get_sql(
    'post',
    $wpdb->posts,
    'ID',
    null
);

正如我在我的主题中所说,我正在尝试从搜索结果中循环并重新创建类似的数组。

首先,我将数组分成两部分。

Array ( [s] => John ) 
Array ( [enseignant] => on [travailleur] => on )

一个中的搜索词和另一个中的复选框。正如你所看到的,我在“enseignant”和“travailleur”中搜索John

为了解决问题,我在这种查询中包装了所有内容:

$requete = array();

$i = 0;

foreach($les_cases as $key => $value) {

    $requete[] = array('key'=>$key, 'value' => $le_terme_de_la_recherche['s'], 'compare'=>'IN');
    $i++;
}

$args = array(
    'post_type'        => 'post',
    'meta_query'        => array(
        'relation' => 'OR',
        $requete
    )
);

当我打印我的请求时,会显示如下内容:

Array
(
    [0] => Array
        (
            [key] => enseignant
            [value] => John
            [compare] => IN
        )

    [1] => Array
        (
            [key] => travailleur
            [value] => John
            [compare] => IN
        )

)
Array
(
    [post_type] => post
    [meta_query] => Array
        (
            [relation] => OR
            [0] => Array
                (
                    [0] => Array
                        (
                            [key] => enseignant
                            [value] => John
                            [compare] => IN
                        )

                    [1] => Array
                        (
                            [key] => travailleur
                            [value] => John
                            [compare] => IN
                        )

                )

        )

)

你看到我的数组中有很多[0],我怀疑这会在我的查询中产生一些错误。

毕竟,如果我希望能够选择部分数据,我应该比较 LIKE IN = 。例如,如果我写约翰,它就能给我John Doe。

如果有人可以帮助我管理这个难题,我会很优雅。

1 个答案:

答案 0 :(得分:2)

meta_query中有一个额外的数组。

而不是做

$args = array(
    'post_type'        => 'post',
    'meta_query'        => array(
        'relation' => 'OR',
        $requete
    )
);

$args = array(
    'post_type'        => 'post',
    'meta_query'        => array_merge( // merge instead of pushing a new array
        array( 'relation' => 'OR' ),    // this must be an array
        $requete
    )
);

当然,确保你的元键是正确的 (顺便说一句,[0]只是数组键,你不能没有键的数组)。