2016-03-29 9 views
0

Ich werde eine WP_Query mit Argumenten basierend auf Benutzereingaben ausführen lassen. Der Benutzer kann mehrere Kategorien/Begriffe auswählen, und die Abfrage wird basierend auf dem UND-Booleschen Wert gefiltert.Bedingte Abfragen in einer Wordpress-Schleife

// main arguments 
$args = array(
    'tax_query' => array(
     'relation' => 'AND', 
     array(
      'taxonomy' => 'industry', 
      'terms' => $user_input, 
     ), 
     array(
      'taxonomy' => 'format', 
      'terms' => $user_input2, 
     ), 
    ), 
); 

// less specific arguments 
$lessargs = array(
    'tax_query' => array(
     array(
      'taxonomy' => 'industry', 
      'terms' => $user_input, 
     ), 
    ), 
); 

Wenn keine Ergebnisse in der ersten Abfrage zurückgegeben werden, möchte ich die zweite Abfrage mit weniger Spezifität ($ lessargs) laufen zu lassen. Ich weiß, dass ich if/else-Anweisungen verwenden muss, aber ich kenne nicht den richtigen Weg, dies innerhalb der Schleife zu tun. Beispiel:

<?php $the_query = new WP_Query($args); ?> 

<?php if ($the_query->have_posts()) : ?> 

    <?php while ($the_query->have_posts()) : the_post(); ?> 
     // Return Query Results 
    <?php endwhile; ?> 

    <?php else : ?> 

    <?php $the_second_query = new WP_Query($less_args); ?> 

    <?php while ($the_second_query->have_posts()) : the_post(); ?> 
     // Return Second Query Results 
    <?php endwhile; ?> 

<?php endif; ?> 

Ist dies der richtige Weg, Abfragen bedingt zu rufen, wenn die vorherige Abfrage leer zurückkehrt?

+0

Das sollte funktionieren, und ja - das 'if else' sollte tun, was Sie wollen, und es ist ein vernünftiger Weg, es zu tun. –

Antwort

0

ich es etwas anders machen würde, nur für die Tatsache gerecht zu werden, dass weder Abfrage alle Zeilen zurück:

$the_query = new wp_query($args); 
if ($the_query->have_posts()) { 
    while ($the_query->have_posts()) { 
     the_post(); 
     // Return Query Results 
    } 
} else { 
    $the_query = new wp_query($lessargs); 
    if ($the_query->have_posts()) { 
     while ($the_query->have_posts()) { 
      the_post(); 
      // Return Second Query Results 
     } 
    } else { 
     echo '<p>No posts found.</p>'; 
    } 
} 

Hinweis Sie haben ein Tippfehler mit Ihrer Variable.

0

Ich baue immer meine eigene Schleife, wann immer ich eine benutzerdefinierte Abfrage brauchte.

Sie können tun es wahrscheinlich wie diese,

# First Argument 
$args = array(
    'tax_query' => array(
     'relation' => 'AND', 
     array(
      'taxonomy' => 'industry', 
      'terms' => $user_input, 
     ), 
     array(
      'taxonomy' => 'format', 
      'terms' => $user_input2, 
     ), 
    ), 
); 
# Second Argument 
$lessargs = array(
    'tax_query' => array(
     array(
      'taxonomy' => 'industry', 
      'terms' => $user_input, 
     ), 
    ), 
); 

$query = new WP_QUery($args); //Run First Query 

$posts = $query->get_posts(); //Get Post of first Query 

if (!$posts) { //If no post on First query Run Second Query 
    $query = new WP_QUery($lessargs); 
    $posts = $query->get_posts(); //Get Post of second query 
} 
if (!$posts) return 'No Result Found'; //stop execution if no results 
foreach($posts as $post) { //Loop through each result 
     _e($post->post_title); // Echo the title 
    } 
}