¿Cómo buscar en un campo personalizado?

4

Tengo un tipo de mensaje personalizado llamado LAW. LAW tiene tres campos personalizados: LAW_DATE, LAW_TEXT y LAW_AUTHOR. Quiero crear una página de búsqueda que me permita buscar independientemente cada uno de estos campos personalizados. Es decir. diferentes criterios para cada campo, combinados con y / o entre sí.

Gracias.

    
pregunta p.a. 21.05.2012 - 08:39

1 respuesta

4

La siguiente función debe incluirse en el archivo functions.php de su plantilla. O en un 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' );

La función anterior supone que el formulario HTML será similar a este:

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

No hace ninguna validación en la entrada del usuario, (wordpress puede hacer algo de eso, pero es mejor si lo haces).

    
respondido por el Mihai Stancu 21.05.2012 - 09:54

Lea otras preguntas en las etiquetas