Como pesquisar em um campo personalizado?

4

Eu tenho um tipo de postagem personalizado chamado LAW. A LAW tem três campos personalizados: LAW_DATE, LAW_TEXT e LAW_AUTHOR. Eu quero construir uma página de pesquisa que me permita pesquisar de forma independente cada um desses campos personalizados. Ou seja critérios diferentes para cada campo, combinados com e / ou entre si.

Obrigado.

    
por p.a. 21.05.2012 / 08:39

1 resposta

4

A seguinte função precisa ser colocada no functions.php do seu código de modelo. Ou em um plugin.

function custom_search_query( $request ) {
    $query = new WP_Query();  // the query isn't run if we don't pass any query vars
    $query->parse_query($request);

    $request['post_type'] = 'LAW';

    // this is the actual manipulation; do whatever you need here
    if(isset($_GET['search']))
        $options = $_GET['search'];
    if (!empty($options)) {
        $i = 0;
        $request['meta_query'] = array(); // resetting any previously selected meta_queries that might "linger" and cause weird behaviour.
        // CAREFUL HERE ^ might not be desired behaviour

        foreach($options AS $key => $value) {
            $request['meta_query'][$i]['key'] = $key;
            $request['meta_query'][$i]['value'] = array($value);
            $request['meta_query'][$i]['compare'] = 'IN';
            $request['meta_query'][$i]['type'] = 'CHAR';
            $i++;
        }
    }

    return($request);
}
add_filter( 'request', 'custom_search_query' );

A função acima assume que o formulário HTML será semelhante a este:

<input type="text|number" name="search[keyname1]" value="value1" />
<input type="text|number" name="search[keyname2]" value="value2" />

Não faz nenhuma validação na entrada do usuário, (o wordpress pode fazer um pouco disso, mas é melhor se você fizer isso).

    
por Mihai Stancu 21.05.2012 / 09:54