2016-06-26 14 views
-2

Ich versuche, einen Kategoriefilter auf meiner Website zu erstellen, der es einem Benutzer ermöglicht, eine Kategorie in zwei Kategorienlisten auszuwählen. Eine Liste heißt "Zonen" und die andere heißt "Geschäftstypen". Wenn Sie im Formular auf die Schaltfläche "Senden" klicken, sollte die Seite aktualisiert werden und nur die Posts in den vom Benutzer ausgewählten Kategorien angezeigt werden. Dies ist der vollständige Code:isset mit mehreren Parametern

$zones = get_field('zones_list'); 
$business_types = get_field('business_type'); 

echo'<form role="search" method="post" id="searchform"> 
    <div>'; 
    foreach($zones as $zone): 
     echo'<input type="radio" value="'.$zone->slug.'" name="zone_list[]">'.$zone->name.'</input>'; 
    endforeach; 
    echo'</div> 
    <div>'; 
    foreach($business_types as $business_type): 
     echo'<input type="radio" value="'.$business_type->slug.'" name="business_type[]">'.$business_type->name.'</input>'; 
    endforeach; 
    echo'</div> 
    <input type="submit" id="searchsubmit" value="Submit" /> 
</form>'; 

if(isset($_POST['zone_list'])) { 
    $list_name = $_POST['zone_list']; 
    $list_formated = implode('+', $list_name); 
} else if (isset($_POST['business_type'])) { 
    $list_name = $_POST['business_type']; 
    $list_formated = implode('+', $list_name); 
} else if (isset($_POST['zone_list'], $_POST['business_type'])) { 
    $list_name_1 = $_POST['zone_list']; 
    $list_name_2 = $_POST['business_type']; 
    $list_both = array_merge($list_name_1,$list_name_2); 
    $list_formated = implode('+', $list_both); 
} else {} 

$args = array(
     'post_type' => 'post', 
     'orderby' => 'date', 
     'category_name' => $list_formated, 
     'order' => 'DESC', 
     'posts_per_page'=> '3', 
     'paged' => get_query_var('paged'), 
    ); 
     global $wp_query; 
     $wp_query = new WP_Query($args); 
     if($wp_query->have_posts()): 
     while($wp_query->have_posts()): $wp_query->the_post(); global $post; 

Gerade jetzt, nur die Form Filter funktionieren, wenn Sie eine Kategorie in einer Kategorie-Liste auswählen. Wenn Sie zwei Kategorien auswählen (eine in jeder Liste), für die ich dies tun muss, wird NULL zurückgegeben. Ich glaube, der Fehler hier befindet:

else if (isset($_POST['zone_list'], $_POST['business_type'])) { 
    $list_name_1 = $_POST['zone_list']; 
    $list_name_2 = $_POST['business_type']; 
    $list_both = array_merge($list_name_1,$list_name_2); 
    $list_formated = implode('+', $list_both); 
} else {} 

Ich PHP nur zu lernen, so könnte es ein besserer Weg, dies zu tun, aber das ist die einzige Lösung, die ich bisher gefunden habe. Ich schätze jede Hilfe, die ich bekommen kann.

Antwort

-1

Sie können es auf diese Weise schreiben

if (isset ($ _ POST [ 'zone_list']) & & isset ($ _ POST [ 'business_type'])) {

& & beide issets bedeutet müssen wahr sein. Sie können schreiben & & oder und, es ist das gleiche.

+0

Ich habe das versucht und es funktioniert immer noch nicht. Ich weiß nicht warum, aber aus irgendeinem Grund läuft es nie so. – Ozzigity

+0

Wenn Sie zwei Kategorien auswählen, wird nur die erste Bedingung ausgeführt. – Ozzigity

+0

weil die erste Aussage wahr ist, die anderen nicht funktionieren. Teilen Sie Ihre if-elseif-else in separaten if-else Konstrukte –