Formulario de búsqueda avanzada con filtros para taxonomías personalizadas y campos personalizados


30

Me gustaría crear un formulario de búsqueda avanzada para un tipo de publicación personalizado específico, que tenga filtros para los campos personalizados de tipos de publicación personalizados, taxonomías personalizadas y para propiedades de tipos de publicaciones personalizadas separadas (campos y taxonomías) que serán enlaces al primer tipo de publicación utilizando un campo de relación personalizado.

Recientemente comencé con los tipos, campos y taxonomías de publicaciones personalizadas de WP, hasta ahora me encanta, pero para aprovecharlo al máximo me gustaría poder buscarlo correctamente. ¿Necesito hacerlo manualmente? ¿Si es así, cómo?

PD. Si es importante, estoy usando los complementos: Campos personalizados avanzados y IU de tipo de publicación personalizada .

A continuación, hice un ejemplo de cómo se vería el filtrado y cómo podría relacionarse con los tipos de publicaciones anteriores.

formulario de búsqueda personalizada de WordPress filtrado por campos personalizados y taxonomías personalizadas


Si alguien tiene dificultades para implementar la solución de Brady anterior (como yo lo hice), aquí hay una pista: parece que Wordpress tiene algunos problemas para pasar los datos de la sesión, por lo que probablemente tendrá que hacer algo extra para que funcione correctamente. Los problemas se discuten aquí: frank-verhoeven.com/using-session-in-wordpress Para mí, instalar el plugin "Simple Session Support" de Peter Wooster fue el truco. Hay un enlace al complemento en la sección de comentarios de la publicación.
SteveR

Respuestas:


16

Creo que algo como esto sería mejor que escribieras tú mismo.

Echa un vistazo a: http://www.catalysthomes.co.uk/homes-for-sale/

Las propiedades se cargan en un CPT y tengo mi propia búsqueda personalizada en la barra lateral. De esa búsqueda está buscando varias cosas como taxonomías, campos personalizados y pedidos por fecha, precio, etc.

Entonces, ¿cómo puedo lograr esto? Envío el formulario a una plantilla de página y desde allí me ocupo de los datos de la publicación y construyo un nuevo WP_query basado en los criterios de búsqueda. Utilizo sesiones para almacenar las variables de búsqueda para poder paginar los resultados.

WP_Query es muy poderoso. Echa un vistazo: http://codex.wordpress.org/Class_Reference/WP_Query

Allí puede usar meta_querypara consultar múltiples campos personalizados y usar tax_querypara consultar sus taxonomías, además hay más. A continuación se muestra cómo está construido el mío para darle una idea.

Archivo de plantilla:

  <?php
  $temp = $wp_query;
  $wp_query = NULL;
  $args = array();
  ?>

  <?php include("functions/Homes-for-sale/propertyrawresults.php"); ?>
  <?php include("functions/Homes-for-sale/propertysearchresults.php"); ?>

  <?php
  $args['post_type'] = "homes-for-sale";
  $args['showposts'] = 10;
  $args['paged'] = $paged;
  $wp_query = new WP_Query($args);
  ?>

  <?php include("functions/Homes-for-sale/propertylistlayout.php"); ?>

Resultados sin procesar

<?php
if($_POST['sortby']) {
    $_SESSION['prop_selectedsortby'] = $_POST['sortby'];
}

switch($_SESSION['prop_selectedsortby']) {
    case "name-asc": $args['order'] = "ASC"; $args['orderby'] = "title"; break;
    case "name-desc": $args['orderby'] = "title"; break;
    case "price-asc": $args['order'] = "ASC"; $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "price-desc": $args['orderby'] = "meta_value_num"; $args['meta_key'] = "chb_homes_for_sale_specifics_fmv"; break;
    case "date-asc": $args['order'] = "ASC"; break;
    default: /* No need to set arguments here as wp query defaults */ break;
}

$selectedsortby[$_SESSION['prop_selectedsortby']] = " selected=\"selected\"";
?>

Resultados de la búsqueda

<?php
if( ! empty( $_SESSION['s_property_ptype'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_types_nbrs',
        'value' => $_SESSION['s_property_ptype']
    );
}

if( ! empty( $_SESSION['s_property_development'] ) ) {
    $args['meta_query'][] = array(
        'key' => 'chb_homes_for_sale_ofdevelopment',
        'value' => $_SESSION['s_property_development']
    );
}

if( isset( $_SESSION['s_property_area'] ) && 0 != $_SESSION['s_property_area'] ) {
    $args['tax_query'][] = array(
        'taxonomy' => 'areas',
        'field' => 'id',
        'terms' => array( (int) $_SESSION['s_property_area'] ),
    );
}

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bedrooms',
    'value' => $_SESSION['s_property_bedrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_min'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_bathrooms',
    'value' => $_SESSION['s_property_bathrooms_max'],
    'compare' => '<=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_min_price'],
    'compare' => '>=',
    'type' => 'SIGNED'
);

$args['meta_query'][] = array(
    'key' => 'chb_homes_for_sale_specifics_fmv',
    'value' => $_SESSION['s_property_max_price'],
    'compare' => '<=',
    'type' => 'SIGNED'
);
?>

Diseño de lista Solo un bucle WP estándar para mostrar extractos de publicaciones e información.


Hola Brady, gracias por este ejemplo. ¿Podría pedirle, si es posible, que comparta el formulario? En él, ¿a qué URL lo envías?
salocin

@salocin - Esa información puede obtenerse mirando la fuente de la página en la URL dada en respuesta
Brady

Gracias Brady, ¿entonces la URL de la plantilla de página?
salocin

El formulario está en catalysthomes.co.uk. Puede ver la fuente y ver cómo funciona el formulario
Brady

¿Verifica si las taxonomías personalizadas tienen publicaciones con ellas como un campo personalizado? ¿Cómo exactamente estás rellenando el formulario de búsqueda? @ Brady gracias
Phil Hudson

2

Pruebe el plugin Taxonomy Picker junto con Relevanssi. Combinación asesina.

http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/


Esto no tiene en cuenta las relaciones posteriores, que es la parte difícil de mi problema. Es mucho más fácil filtrar publicaciones por taxonomía, necesito filtrarlas para comprar la taxonomía (o campo personalizado) de una publicación relacionada.
pax

0

Eche un vistazo al complemento Relevanssi, podría hacer lo que está buscando: http://wordpress.org/extend/plugins/relevanssi/


No se ajusta al enfoque que necesito (con filtros específicos), pero es un complemento muy interesante, parece un gran reemplazo para la función de búsqueda predeterminada, muchas gracias por señalarlo.
pax

0

Si alguien tiene dificultades para implementar la solución de Brady anterior (como yo lo hice), aquí hay una pista: parece que WordPress tiene algunos problemas para pasar los datos de la sesión, por lo que probablemente tendrá que hacer algo extra para que funcione correctamente. Los temas se discuten aquí

En functions.php:

function init_sessions() {
  if (!session_id()) {
  session_start();
 }
}
add_action('init', 'init_sessions');

En tu plantilla:

/**
* Enable sessions
*/
if (!session_id())
session_start();

Para mí, instalar el plugin " Simple Session Support " de Peter Wooster fue el truco.


1
Hola Steve. Gracias por publicar tu primera respuesta aquí. Me alegro de tenerte en WPSE. Para referencia futura, las respuestas no deberían pivotar completamente en un enlace externo. Si el enlace está desactivado, su respuesta se vuelve benigna. ¿Le importaría actualizar su respuesta con un par de fragmentos de código relevantes de muestra?
Brian Fegter
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.