WordPress: Söka med hjälp av flera dropdowns?

Permalänk
Medlem

WordPress: Söka med hjälp av flera dropdowns?

Hej!

Jag har letat med ljus och lykta efter denna funktionen, jag vill alltså göra en sökning med 2 "variabler", en från kategori och för plats, men detta verkar nästan vara omöjligt. Är ju lätt att göra en query post men då är det ju förutbestämt vad som listas, det är ju användaren som skall baka ihop vad som skall queryas.

Jag har en WordPress sida som listar uppkommande evenemang, tex Bilmässa i Jönköping, men användaren skall själv kunna välja först evenemangstyp, sen plats, och om han vill även med text, alla fält skall inte ha något krav på att behövas fyllas i, tex ska man själv kunna bara välja plats och sen trycka på sök, så listas alla evenemang på den platsen.

Ungefär såhär hade jag tänkt att det skulle se ut:

Men detta verkar närapå omöjligt att baka ihop.

Just nu är "Platsen" gjord med custom taxonomy.

Någon som vet om detta är möjligt? Vore extremt tacksam

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?

Permalänk
Medlem

Jag tror inte detta är ett WordPress specifikt problem så kan posta en kod, som delvis fungerar, den gör en söksträng baserat på 2 dropdowns, ena i en kategori, sen andra baserat på en taxonomy, problemet är att den spottar ut fel söksträng men någon här kanske är jävligt på att rätta till det? Ganska mycket kod:

Funktioner för att göra en söksträng och för att lista taxonomies, min taxonomy heter "location", definerad längst upp.

function dropdown_search($taxonomy, $args = '' ) { $defaults = array('taxonomy' => 'location', // <- write taxonomy name 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45, 'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC', 'exclude' => '', 'include' => '' ); $args = wp_parse_args( $args, $defaults ); $terms = get_terms($taxonomy, array_merge($args, array('orderby' => 'count', 'order' => 'DESC')) ); // Always query top tags if ( empty($terms) ) return; $return = generate_dropdown_search( $terms, $taxonomy, $args ); // Here's where those top tags get sorted according to $args if ( is_wp_error( $return ) ) return false; else echo apply_filters( 'dropdown_search', $return, $args ); } function generate_dropdown_search( $terms, $taxonomy, $args = '' ) { global $wp_rewrite; $defaults = array( 'smallest' => 8, 'largest' => 22, 'unit' => 'pt', 'number' => 45, 'format' => 'flat', 'orderby' => 'name', 'order' => 'ASC' ); $args = wp_parse_args( $args, $defaults ); extract($args); if ( !$terms ) return; $counts = $term_links = $term_slugs = array(); foreach ( (array) $terms as $term ) { $counts[$term->name] = $term->count; $term_links[$term->name] = get_term_link( $term->name, $taxonomy ); $term_slugs[$term->name] = $term->slug; if ( is_wp_error( $term_links[$term->name] ) ) return $term_links[$term->name]; $term_ids[$term->name] = $term->term_id; } $min_count = min($counts); $spread = max($counts) - $min_count; if ( $spread <= 0 ) $spread = 1; $font_spread = $largest - $smallest; if ( $font_spread <= 0 ) $font_spread = 1; $font_step = $font_spread / $spread; // SQL cannot save you; this is a second (potentially different) sort on a subset of data. if ( 'name' == $orderby ) uksort($counts, 'strnatcasecmp'); else asort($counts); if ( 'DESC' == $order ) $counts = array_reverse( $counts, true ); $a = array(); $rel = ( is_object($wp_rewrite) && $wp_rewrite->using_permalinks() ) ? ' rel="term"' : ''; foreach ( $counts as $term => $count ) { $term_id = $term_ids[$term]; $term_link = clean_url($term_links[$term]); $term_slug = $term_slugs[$term]; $term = str_replace(' ', ' ', wp_specialchars( $term )); $a[] = "\t<option value='$term_slug'>$term ($count)</option>"; } switch ( $format ) : case 'array' : $return =& $a; break; case 'list' : $return = "<ul class='wp-tag-cloud'>\n\t<li>"; $return .= join("</li>\n\t<li>", $a); $return .= "</li>\n</ul>\n"; break; default : $return = join("\n", $a); break; endswitch; return apply_filters( 'generate_dropdown_search', $return, $term, $args ); }

Sen för att visa hela härligheten: (det är inte denna som skapar problem vad jag kan se iaf)

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/"> <div class="alignleft"> <?php wp_dropdown_categories( 'show_option_all=Alla kategorier' ); ?> <select name="taxonomy"> <option value="0">Hela sverige</option> <?php dropdown_search('location', 'number=0&order=asc'); ?> </select> </div> <input type="text" value="<?php the_search_query(); ?>" name="s" id="s" class="searchinput" /> <input type="submit" id="searchsubmit" value="Search" class="btn" /> </form>

Söksträngen den skickar ut när man väljer taxonomy från dropdown listan är: "?cat=0&taxonomy=dalarna&s=" istället för "?cat=0&taxonomy=location&term=dalarna&s="

Någon som har en gissning på hur man rättar till söksträngen?

Visa signatur

Hur kan syltkakor överleva i det vilda utan ögon?