Modulo di ricerca avanzata con filtri per tassonomie personalizzate e campi personalizzati
-
-
Se qualcuno ha difficoltà aimplementare la soluzione di Brady sopra (come hofattoio),ecco un suggerimento: sembra che Wordpress abbia alcuniproblemi conilpassaggio dei dati di sessione,quindiprobabilmente dovraifare qualcosain piùperfarlofunzionare correttamente.Iproblemi sono discussi qui: http://www.frank-verhoeven.com/using-session-in-wordpress/ Perme l'installazione delplugin "Simple Session Support" di Peter Wooster hafunzionato.C'è un collegamento alpluginnella sezione commenti delpost.If anyone is having difficulty implementing Brady's solution above (as I did) here's a hint: It appears that Wordpress has some problems with passing session data so you will probably have to do something extra to make it work properly. The issues are discussed here: http://www.frank-verhoeven.com/using-session-in-wordpress/ For me installing Peter Wooster's "Simple Session Support" plugin did the trick. There's a link to the plugin in the comments section of the post.
- 0
- 2012-09-14
- SteveR
-
4 risposta
- voti
-
- 2012-02-10
Penso che sarebbemeglio scrivere qualcosa delgenere da solo.
Dai un'occhiata a: http://www.catalysthomes.co.uk/homes-for-sale/
Leproprietà vengono caricatein un CPTe ho lamia ricercapersonalizzatanellabarra laterale. Di quella ricerca sta cercando una serie di cose cometassonomie,campipersonalizzatie ordinamentoperprezzo di dataecc.
Allora come ottengo questo? Invioilmodulo a unmodello dipaginae da lìmi occupo dei dati delposte creo unnuovo WP_querybasato sui criteri di ricerca. Uso le sessionipermemorizzare le variabili di ricercain modo dapoterimpaginarei risultati.
WP_Query èmoltopotente. Dai un'occhiata: http://codex.wordpress.org/Class_Reference/WP_Query
Lìpuoi utilizzare
meta_query
pereseguire query supiù campipersonalizzatie utilizzaretax_query
perinterrogare letuetassonomie,inoltre c'è dipiù. Di seguito è riportato come è costruitoilmioper darti un'idea.Filemodello:
<?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"); ?>
Risultatigrezzi
<?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' ); ?>
Layoutelenco Solo un ciclo WP standardpermostrareestratti diposte informazioni.
I think something like this you would be best writing yourself.
Take a look at: http://www.catalysthomes.co.uk/homes-for-sale/
Properties are loaded into a CPT and I have my own custom search in the sidebar. Of that search its searching a number of things such as taxonomies, custom fields and ordering by date price etc.
So how do I achieve this? I submit the form to a page template and from there I deal with the post data and build a new WP_query based on the search criteria. I use sessions to store the search variables so that I can paginate the results.
WP_Query is very powerful. Take a look: http://codex.wordpress.org/Class_Reference/WP_Query
In there you can use
meta_query
to query multiple custom fields and usetax_query
to query your taxonomies, plus there is more. Below is how mine is built to give you an idea.Template File:
<?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"); ?>
Raw Results
<?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\""; ?>
Search Results
<?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' ); ?>
List Layout Just a standard WP loop to show post excerpts and info.
-
Ciao Brady,grazieper questoesempio.Posso chiederti,sepossibile,di condividereilmodulo?Inesso,a quale URL lo staiinviando?Hi Brady, Thx for this example. Could I ask you, if possible, to share the form? In it, what URL are your submitting it to?
- 0
- 2012-06-28
- salocin
-
@salocin - Quelleinformazionipossonoessere ottenuteguardando lafonte dellapagina sull'URLfornitoin risposta@salocin - That information can be gotten by looking at the source of the page on the given URL in answer
- 0
- 2012-06-28
- Scott
-
grazie Brady,quindi l'URL delmodello dipagina?thx Brady, so url of the page template?
- 0
- 2012-06-28
- salocin
-
Ilmodulo è su catalysthomes.co.uk.Puoi visualizzare l'originee vedere comefunzionailmoduloThe form is on catalysthomes.co.uk. You can view source and see how the form works
- 0
- 2012-06-28
- Scott
-
Stai controllando se letassonomiepersonalizzate hannopost con loro come campopersonalizzato?Come stai compilandoesattamenteilmodulo di ricerca?@ Brady,grazieAre you check to see if the custom taxonomies have posts with them as a custom field? How exactly are you populating the search form? @Brady thanks
- 0
- 2016-02-19
- Phil Hudson
-
- 2012-01-11
Provailplug-in Selezionetassonomia insieme a Relevanssi.Combinazione killer.
http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/
Try Taxonomy Picker plugin together with Relevanssi. Killer combination.
http://www.squidoo.com/taxonomy-picker-wordpress-plugin http://wordpress.org/extend/plugins/relevanssi/
-
questonontiene conto delle relazionipost,che è laparte difficile delmioproblema.Èmoltopiù semplicefiltrarei postpertassonomia,devofiltrarliper acquistare latassonomia (o campopersonalizzato) di unpost correlato.this doesn't take into account post relationships, that being the difficult part of my problem. It's way easier to filter posts by taxonomy, I need to filter them buy the taxonomy (or custom field) of a related post.
- 0
- 2012-01-14
- pax
-
- 2012-01-10
Dai un'occhiata alplug-in Relevanssi,potrebbefare quello che stai cercando: http://wordpress.org/extent/plugins/rilevanssi/
Take a look at Relevanssi plugin, it might do what you are looking for: http://wordpress.org/extend/plugins/relevanssi/
-
Non si adatta all'approccio di cui hobisogno (confiltri specifici),ma è unpluginmoltointeressante,sembra un ottimo sostitutoper lafunzione di ricercapredefinita,graziemilleper averlo segnalato.It doesn't suit the approach that I need (with specific filters), but it's a very interesting plugin, it looks like a great replacement for the default search function, thanks very much for pointing it out.
- 0
- 2012-01-10
- pax
-
- 2012-09-14
Se qualcuno ha difficoltà aimplementare la soluzione di Brady sopra (come hofattoio),ecco un suggerimento: sembra che WordPress abbia alcuniproblemi conilpassaggio dei dati di sessione,quindiprobabilmente dovraifare qualcosain piùperfarlofunzionare correttamente.Iproblemi sono discussi qui
Infunctions.php:
funzioneinit_sessions () { if (! session_id ()) { session_start (); } } add_action ('init','init_sessions');
Neltuomodello:
/** * Abilita sessioni */ if (! session_id ()) session_start (); Perme l'installazione delplug-in " Simple Session Support " di Peter Wooster hafunzionatotrucco.
If anyone is having difficulty implementing Brady's solution above (as I did) here's a hint: It appears that WordPress has some problems with passing session data so you will probably have to do something extra to make it work properly. The issues are discussed here
In functions.php:
function init_sessions() { if (!session_id()) { session_start(); } } add_action('init', 'init_sessions');
In your template:
/** * Enable sessions */ if (!session_id()) session_start();
For me installing Peter Wooster's "Simple Session Support" plugin did the trick.
-
Ciao Steve.Grazieper averpostato latuaprima risposta qui.Sono contento di averti alla WPSE.Per riferimentofuturo,le rispostenon dovrebbero ruotare completamente su un collegamentoesterno.Seil collegamento è disabilitato,latua risposta diventabenigna.Ti dispiacerebbe aggiornare latua risposta con unpaio diframmenti di codicepertinenti diesempio?Hi Steve. Thanks for posting your first answer here. Glad to have you at WPSE. For future reference, answers shouldn't pivot completely on an external link. If the link is disabled, your answer becomes benign. Would you mind updating your answer with a couple of sample relevant code snippets?
- 1
- 2012-09-16
- Brian Fegter
Vorrei creare unmodulo di ricerca avanzataper untipo dipostpersonalizzato specifico,confiltriperi campipersonalizzati deitipi dipostpersonalizzati,tassonomiepersonalizzatee perproprietà ditipi dipostpersonalizzati separati (campie tassonomie) che saranno collegamenti alprimotipo dipost utilizzando un campo di relazionepersonalizzato.
Recentemente hoiniziato coni tipi dipost,i campie letassonomiepersonalizzati di WP,mi piacefinoramaper sfruttarlo almegliomi piacerebbepoterlo cercare correttamente. Devofarlomanualmente? In caso affermativo,come?
PS. Se èimportante,sto utilizzandoi plug-in: Advanced Custom Fields e UI ditipopostpersonalizzato .
Di seguito ho simulato unesempio di come apparirebbeilfiltroe di comepotrebbeessere correlato aitipi dipost sopra.