重置对META_KEY/META_VALUE搜索的最佳方式是什么?

时间:2017-04-06 作者:Sébastien Gicquel

我用不同的<select><input>.

我使用meta_query 并构建一个键/值对数组。

Array
(
    [relation] => AND
    [0] => Array
        (
            [relation] => AND
            [0] => Array
                (
                    [fields] => ID
                    [key] => ville
                    [value] => Angers
                    [compare] => LIKE
                    [type] => CHAR
                )

        )

    [1] => Array
        (
            [relation] => OR
        )

    [2] => Array
        (
            [relation] => OR
        )

)
它可以工作,我可以过滤用户或帖子(我使用WP_User_QueryWP_Query).

搜索表单使用AJAX,这意味着每次用户更改select, 这个$query_array 更新,结果列表也会更新。

因此,假设select的默认值为0

<option selected="" value="0"> -- City -- </option>
在这种情况下,我重置了meta\\u键/meta\\u值:

if (!empty($_POST[\'city\']) && $_POST[\'city\'] != \'0\') {

        $meta_value_ville = $_POST[\'city\'];
        array_push($query_array_and, array(\'fields\' => \'ID\', \'key\' => \'ville\', \'value\' => $meta_value_ville, \'compare\' => \'LIKE\', \'type\' => \'CHAR\'));
    } else if ($_POST[\'city\'] === \'0\') {
        // reset
        array_push($query_array_and, array(\'fields\' => \'ID\', \'key\' => \'\', \'value\' => \'\', \'compare\' => \'LIKE\', \'type\' => \'CHAR\'));
    }
我清空键和值。

结果是

Array
(
    [relation] => AND
    [0] => Array
        (
            [relation] => AND
            [0] => Array
                (
                    [fields] => ID
                    [key] => 
                    [value] => 
                    [compare] => LIKE
                    [type] => CHAR
                )

        )

    [1] => Array
        (
            [relation] => OR
        )

    [2] => Array
        (
            [relation] => OR
        )

)
这是最好的方法吗?我觉得有些时候,使用这种方法,帖子或用户的列表并不完整。

1 个回复
SO网友:Barry Kooij

我不会像那样推送元查询条目,而是构建更符合逻辑的元查询条目。

例如:

$meta_query_args = array( \'relation\' => \'AND\' ); // assuming you want \'AND\' search, you\'re using both in your example

if ( ! empty( $_POST[\'city\'] ) && $_POST[\'city\'] != \'0\' ) {

    $meta_value_ville = $_POST[\'city\'];

    $meta_query_args[\'city_clause\'] = array(
        \'key\'     => \'ville\',
        \'value\'   => $meta_value_ville,
        \'compare\' => \'LIKE\',
        \'type\'    => \'CHAR\'
    );
}

// Example, say you also have a country field
if ( ! empty( $_POST[\'country\'] ) && $_POST[\'country\'] != \'0\' ) {

    $meta_value = $_POST[\'country\'];

    $meta_query_args[\'country_clause\'] = array(
        \'key\'     => \'country\',
        \'value\'   => $meta_value,
        \'compare\' => \'LIKE\',
        \'type\'    => \'CHAR\'
    );
}
注1:我不再将日期推到现有阵列中,每次都从头开始构建。这将为您保存重置某些元查询数组的所有代码。

注2:我删除了\'fields\' => \'ID\' 部分,因为这不是meta\\u查询的一部分。您应该将此添加到WP_Query.

注3:因为我给出了命名索引(例如。city_clause) 你可以在剩下的时间里使用它们WP_Query. 示例:现在可以按如下方式对其排序:

$q = new WP_Query( array(
    \'meta_query\' => $meta_query_args,
    \'orderby\'    => \'city_clause\'
) );

相关推荐

使用WP_QUERY混合发布日期和发布元值

正在寻找使用自定义字段将旧帖子推送到WP\\u查询中的方法。例如,我今年有10篇文章,想将过去的2篇文章重新发布到自定义rss提要。因此,对于旧帖子,必须按照帖子日期和帖子元中的值对帖子进行排序:new post - (post date: 2018-11-11) new post - (post date: 2018-11-10) old post - (post date: 2017-05-01, post-meta date: 2018-11-09) new post - (