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


30

Vorrei creare un modulo di ricerca avanzata per un tipo di post personalizzato specifico, con filtri per i tipi di post personalizzati campi personalizzati, tassonomie personalizzate e per proprietà di tipi di post personalizzati separati (campi e tassonomie) che saranno collegamenti al primo inserisci il tipo utilizzando un campo di relazione personalizzato.

Di recente ho iniziato con i tipi di post, i campi e le tassonomie personalizzati di WP, lo adoro finora, ma per sfruttare al meglio mi piacerebbe poterlo cercare correttamente. Devo farlo manualmente? Se é cosi, come?

PS. Se è importante, sto usando i plug-in: Campi personalizzati avanzati e UI Tipo di post personalizzato .

Di seguito ho preso in esame un esempio di come apparirebbe il filtro e come potrebbe essere correlato ai tipi di post sopra.

modulo di ricerca personalizzato wordpress filtrato per campi personalizzati e tassonomie personalizzate


Se qualcuno ha difficoltà a implementare la soluzione di Brady sopra (come ho fatto io) ecco un suggerimento: sembra che Wordpress abbia alcuni problemi con il passaggio dei dati della sessione, quindi probabilmente dovrai fare qualcosa in più per farlo funzionare correttamente. I problemi sono discussi qui: frank-verhoeven.com/using-session-in-wordpress Per me installare il plugin "Simple Session Support" di Peter Wooster ha funzionato. C'è un link al plugin nella sezione commenti del post.
Steve,

Risposte:


16

Penso che qualcosa del genere ti conviene scrivere da solo.

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

Le proprietà sono caricate in un CPT e ho la mia ricerca personalizzata nella barra laterale. Di quella ricerca sta cercando una serie di cose come tassonomie, campi personalizzati e ordinando per data prezzo ecc.

Quindi, come posso raggiungere questo obiettivo? Inoltro il modulo a un modello di pagina e da lì mi occupo dei dati di post e costruisco un nuovo WP_query in base ai criteri di ricerca. Uso le sessioni per memorizzare le variabili di ricerca in modo da poter impaginare i risultati.

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

Qui puoi usare meta_queryper interrogare più campi personalizzati e usare tax_queryper interrogare le tue tassonomie, inoltre c'è di più. Di seguito è riportato il modo in cui il mio è stato creato per darti un'idea.

File modello:

  <?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: /* No need to set arguments here as wp query defaults */ break;
}

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

risultati di 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 elenco Solo un loop WP standard per mostrare estratti di post e informazioni.


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

@salocin - Queste informazioni possono essere ottenute osservando la fonte della pagina sull'URL specificato in risposta
Brady,

grazie Brady, quindi url del modello di pagina?
Salocin,

Il modulo è su catalysthomes.co.uk. Puoi visualizzare la fonte e vedere come funziona il modulo
Brady,

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

2

Prova il plugin Taxonomy Picker insieme a Relevanssi. Combinazione assassina.

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


questo non tiene conto delle relazioni post, essendo questa la parte difficile del mio problema. È molto più semplice filtrare i post per tassonomia, ho bisogno di filtrarli per acquistare la tassonomia (o campo personalizzato) di un post correlato.
pax

0

Dai un'occhiata al plugin Relevanssi, potrebbe fare quello che stai cercando: http://wordpress.org/extend/plugins/relevanssi/


Non soddisfa l'approccio di cui ho bisogno (con filtri specifici), ma è un plugin molto interessante, sembra un ottimo sostituto della funzione di ricerca predefinita, grazie mille per averlo sottolineato.
pax

0

Se qualcuno ha difficoltà a implementare la soluzione di Brady sopra (come ho fatto io) ecco un suggerimento: sembra che WordPress abbia alcuni problemi con il passaggio dei dati della sessione, quindi probabilmente dovrai fare qualcosa in più per farlo funzionare correttamente. I problemi sono discussi qui

In Functions.php:

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

Nel tuo modello:

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

Per me l'installazione del plugin " Simple Session Support " di Peter Wooster ha funzionato .


1
Ciao Steve. Grazie per aver pubblicato la tua prima risposta qui. Sono contento di averti al WPSE. Per riferimento futuro, le risposte non dovrebbero ruotare completamente su un collegamento esterno. Se il collegamento è disabilitato, la tua risposta diventa benigna. Ti dispiacerebbe aggiornare la tua risposta con un paio di esempi di snippet di codice pertinenti?
Brian Fegter,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.