Form di ricerca avanzata con filtri per tassonomie personalizzate e campi personalizzati

9 gen 2012, 18:23:57
Visualizzazioni: 71.3K
Voti: 32

Vorrei creare un form di ricerca avanzata per uno specifico custom post type, con filtri per i campi personalizzati, le tassonomie custom e per le proprietà (campi e tassonomie) di un altro custom post type che sarà collegato al primo utilizzando un campo di relazione personalizzato.

Ho recentemente iniziato a lavorare con i custom post type, i campi personalizzati e le tassonomie di WordPress, mi piace molto finora ma per sfruttarli al meglio vorrei poter effettuare ricerche in modo appropriato. Devo farlo manualmente? Se sì, come?

P.S. Se può essere utile, sto utilizzando i plugin: Advanced Custom Fields e Custom Post Type UI.

Qui sotto ho creato un esempio di come dovrebbe apparire il sistema di filtraggio e come potrebbe essere collegato ai post type sopra citati.

form di ricerca wordpress personalizzato filtrato per campi personalizzati e tassonomie custom

1
Commenti

Se qualcuno ha difficoltà a implementare la soluzione di Brady sopra menzionata (come è successo a me) ecco un suggerimento: sembra che Wordpress abbia alcuni problemi con il passaggio dei dati di sessione, quindi probabilmente dovrai fare qualcosa in più per farlo funzionare correttamente. Le problematiche sono discusse qui: http://www.frank-verhoeven.com/using-session-in-wordpress/ Nel mio caso, l'installazione del plugin "Simple Session Support" di Peter Wooster ha risolto il problema. Troverai un link al plugin nella sezione commenti del post.

SteveR SteveR
15 set 2012 01:43:31
Tutte le risposte alla domanda 4
5
16

Penso che per qualcosa del genere sarebbe meglio scriverlo da soli.

Dai un'occhiata a: http://www.catalysthomes.co.uk/homes-for-sale/

Le proprietà vengono caricate in un CPT (Custom Post Type) e ho una mia ricerca personalizzata nella sidebar. Questa ricerca esamina diverse cose come tassonomie, campi personalizzati e ordina per data, prezzo, ecc.

Quindi, come ottengo questo risultato? Invio il modulo a un template di pagina e da lì gestisco i dati del post e costruisco una nuova WP_query in base ai criteri di ricerca. Uso le sessioni per memorizzare le variabili di ricerca così da poter paginare i risultati.

WP_Query è molto potente. Dai un'occhiata: http://codex.wordpress.org/Class_Reference/WP_Query

Puoi usare meta_query per interrogare più campi personalizzati e tax_query per interrogare le tue tassonomie, oltre a molto altro. Di seguito trovi come ho costruito il mio per darti un'idea.

File Template:

  <?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"); ?>

Risultati Grezzi

<?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: /* Non è necessario impostare argomenti qui poiché wp query ha valori predefiniti */ break;
}

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

Risultati della Ricerca

<?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'
);
?>

Layout della Lista Solo un loop standard di WP per mostrare estratti e informazioni dei post.

10 feb 2012 16:41:22
Commenti

Ciao Brady, grazie per questo esempio. Potrei chiederti, se possibile, di condividere il modulo? In esso, a quale URL lo stai inviando?

salocin salocin
28 giu 2012 10:46:23

@salocin - Quelle informazioni possono essere ottenute guardando il sorgente della pagina all'URL fornito nella risposta

Scott Scott
28 giu 2012 11:06:50

grazie Brady, quindi l'url del template della pagina?

salocin salocin
28 giu 2012 14:49:23

Il modulo si trova su catalysthomes.co.uk. Puoi visualizzare il sorgente e vedere come funziona il modulo

Scott Scott
28 giu 2012 16:15:37

Stai verificando se le tassonomie personalizzate hanno post con loro come campo personalizzato? Come stai esattamente popolando il modulo di ricerca? @Brady grazie

Phil Hudson Phil Hudson
19 feb 2016 08:00:56
1

Prova il plugin Taxonomy Picker insieme a Relevanssi. Una combinazione letale.

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

11 gen 2012 10:54:36
Commenti

questo non tiene conto delle relazioni tra post, che è la parte difficile del mio problema. È molto più semplice filtrare i post per tassonomia, ho bisogno di filtrarli in base alla tassonomia (o custom field) di un post correlato.

pax pax
14 gen 2012 19:09:33
1

Dai un'occhiata al plugin Relevanssi, potrebbe fare al caso tuo: http://wordpress.org/extend/plugins/relevanssi/

10 gen 2012 08:26:56
Commenti

Non si adatta all'approccio di cui ho bisogno (con filtri specifici), ma è un plugin molto interessante, sembra un'ottima sostituzione per la funzione di ricerca predefinita, grazie mille per avermelo segnalato.

pax pax
10 gen 2012 19:37:23
1

Se qualcuno ha difficoltà a implementare la soluzione di Brady sopra menzionata (come è successo a me), ecco un suggerimento: sembra che WordPress abbia alcuni problemi con il passaggio dei dati di sessione, quindi probabilmente sarà necessario fare qualcosa in più per farlo funzionare correttamente. Questi problemi sono discussi qui

In functions.php:

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

Nel tuo template:

/**
* Abilita le sessioni
*/
if (!session_id())
session_start();

Nel mio caso, installare il plugin "Simple Session Support" di Peter Wooster ha risolto il problema.

15 set 2012 01:43:31
Commenti

Ciao Steve. Grazie per aver pubblicato la tua prima risposta qui. Siamo felici di averti su WPSE. Per riferimento futuro, le risposte non dovrebbero dipendere completamente da un link esterno. Se il link viene disabilitato, la tua risposta diventa inutile. Potresti aggiornare la tua risposta con un paio di frammenti di codice rilevanti come esempio?

Brian Fegter Brian Fegter
16 set 2012 07:09:38