Erweitertes Suchformular mit Filtern für benutzerdefinierte Taxonomien und benutzerdefinierte Felder
-
-
Wennjemand Schwierigkeiten hat,die obengenannte Lösung von Brady zuimplementieren (wieich),hierein Hinweis: Es scheint,dass Wordpresseinige Problememit der Übergabe von Sitzungsdaten hat,sodass Sie wahrscheinlichetwasextratunmüssen,damites ordnungsgemäßfunktioniert.Die Probleme werden hier diskutiert: http://www.frank-verhoeven.com/using-session-in-wordpress/ Fürmich hat die Installation des Plugins "Simple Session Support" von Peter Wooster den Trickgetan.Esgibt einen Link zum Pluginim Kommentarbereich des Beitrags.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 Antworten
- Stimmen
-
- 2012-02-10
Ich denke,soetwas schreiben Sie ambesten selbst.
Sehen Sie sich Folgendes an: http://www.catalysthomes.co.uk/homes-for-sale/
Eigenschaften werdenin ein CPTgeladen undich habemeine eigenebenutzerdefinierte Suchein der Seitenleiste. Bei dieser Suche werden verschiedene Dinge wie Taxonomien,benutzerdefinierte Felder und die Bestellungnach Datumspreis usw. durchsucht.
Wieerreicheich das? Ich sende das Formular aneine Seitenvorlage und von dort ausbeschäftigeichmichmit den Postdaten understelleeine neue WP_querybasierend auf den Suchkriterien. Ich verwende Sitzungen,um die Suchvariablen zu speichern,damitich die Ergebnissepaginieren kann.
WP_Queryist sehr leistungsfähig. Schauen Sie sich das an: http://codex.wordpress.org/Class_Reference/WP_Query
Dort können Siemit
meta_query
mehrerebenutzerdefinierte Felder abfragen undmittax_query
Ihre Taxonomien abfragen. Außerdemgibt esnochmehr. Unten sehen Sie,wiemeine gebaut wurde,um Ihneneine Idee zugeben.Vorlagendatei:
<?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"); ?>
Rohergebnisse
<?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\""; ?>
Suchergebnisse
<?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' ); ?>
Listenlayout Nureine Standard-WP-Schleife zum Anzeigen von Post-Ausschnitten und Informationen.
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.
-
Hallo Brady,Dankefür dieses Beispiel.Könnteich Siebitten,wennmöglich,das Formular zuteilen?An welche URL senden Siees?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 - Diese Informationenerhalten Sie,indem Sie als Antwort auf die Quelle der Seite unter der angegebenen URL schauen@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
-
Danke Brady,also URL der Seitenvorlage?thx Brady, so url of the page template?
- 0
- 2012-06-28
- salocin
-
Die Formist auf cataloghomes.co.uk.Sie können die Quelle anzeigen und sehen,wie das FormularfunktioniertThe form is on catalysthomes.co.uk. You can view source and see how the form works
- 0
- 2012-06-28
- Scott
-
Überprüfen Sie,ob diebenutzerdefinierten Taxonomien Beiträge alsbenutzerdefiniertes Feldenthalten?Wiegenaufüllen Sie das Suchformular aus?@ Brady dankeAre 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
Probieren Sie das Taxonomy Picker-Plugin zusammenmit Relevanssi aus.Killerkombination.
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/
-
Diesberücksichtigtnicht die Post-Beziehungen,da dies der schwierige Teilmeines Problemsist.Esist vieleinfacher,Beiträgenach Taxonomie zufiltern. Ichmuss siefiltern,um die Taxonomie (oder dasbenutzerdefinierte Feld)eines verwandten Beitrags zu kaufen.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
Schauen Sie sich das Relevanssi-Plugin an,es könnte dastun,wonach Sie suchen: http://wordpress.org/extens/plugins/relevanssi/
Take a look at Relevanssi plugin, it might do what you are looking for: http://wordpress.org/extend/plugins/relevanssi/
-
Espasstnicht zu dem Ansatz,denichbrauche (mitbestimmten Filtern),aberesistein sehrinteressantes Plugin. Es scheintein großartiger Ersatzfür die Standardsuchfunktion zu sein,vielen Dankfür den Hinweis.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
Wennjemand Schwierigkeiten hat,die obengenannte Lösung von Brady zuimplementieren (wieich),hierein Hinweis: Es scheint,dass WordPresseinige Problememit der Übergabe von Sitzungsdaten hat,sodass Sie wahrscheinlichetwasextratunmüssen,damites richtigfunktioniert.Die Probleme werden hier diskutiert
Infunctions.php:
function init_sessions() { if (!session_id()) { session_start(); } } add_action('init', 'init_sessions');
In Ihrer Vorlage:
/** * Enable sessions */ if (!session_id()) session_start();
Fürmich hat das Installieren des Plugins " Simple Session Support " von Peter Wooster dasTrick.
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.
-
Hallo Steve.Vielen Dank,dass Sie hier Ihreerste Antwortgepostet haben.Schön,Siebei WPSE zu haben.Zum späteren Nachschlagen sollten sich die Antwortennicht vollständig aufeinen externen Link konzentrieren.Wenn der Link deaktiviertist,wird Ihre Antwort harmlos.Würdees Ihnenetwas ausmachen,Ihre Antwortmit einpaar Beispiel-relevanten Codefragmenten zu aktualisieren?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
Ichmöchteein erweitertes Suchformularfüreinen bestimmtenbenutzerdefinierten Beitragstyperstellen,das Filterfür diebenutzerdefinierten Felderfürbenutzerdefinierte Beitragstypen,benutzerdefinierte Taxonomien undfür separate Eigenschaftenfürbenutzerdefinierte Beitragstypen (Felder und Taxonomien)enthält,die Links sind zumersten Beitragstyp unter Verwendungeinesbenutzerdefinierten Beziehungsfelds.
Ich habe kürzlichmit benutzerdefinierten Beitragstypen,Feldern und Taxonomien von WPsbegonnen. Ich liebeesbisher,aber um das Beste daraus zumachen,möchteiches richtig durchsuchen können. Mussichesmanuellmachen? Wennja,wie?
PS. Wennes darauf ankommt,verwendeich die Plugins: Erweitertebenutzerdefinierte Felder und Benutzerdefinierte Benutzeroberflächefür Post-Typen .
Unten habeichein Beispiel vorgestellt,wie die Filterung aussehen würde und wie sie sich auf die obengenannten Beitragstypenbeziehen könnte.