Wie übergebe ich mehrere Checkbox-Werte an die WordPress-Abfrage?

Ich arbeite an einer Website, die mehrere Kontrollkästchen hat, und ich möchte Ergebnisse basierend auf dem Benutzer anzeigen, die ausgewählt wurde.

Es gibt etwa 16 Kontrollkästchen für Musik, 8 Kontrollkästchen für Veranstaltungsorte und 6 Radioknöpfe für den Bereich. Der Benutzer kann maximal 3 Kontrollkästchen in der Musikkategorie aktivieren, maximal 3 von Veranstaltungsorten und 1 von Bereich. Wie beende ich diese WordPress-Abfrage, die nur Beiträge von ausgewählten Kategorien anzeigen würde.

Zum Beispiel, wenn ein Benutzer House, Techno und Dubstep in Musik, Miami als Area ausgewählt hat und nach Veranstaltungen, Musikfestivals und Live-Veranstaltungsorten suchen möchte, wie kann ich das mithilfe der wordpress-Abfrage erreichen?

if(!empty($_POST)){ global $names; $names = $_POST['music']; $music = implode(",", $names); $echo $music; } 

Das wird alle ausgewählten Checkboxen wie House, Dubstep, Miami, Musikfestivals widerspiegeln. Jetzt möchte ich Posts zeigen, die in caegories des Hauses, Dubstep und in Musikfestivals Kategorie und in Miami-Bereich sind.

Was ich benutzt habe ist

  $args = array ( 'category_name' => $music, 'posts_per_page' => 12, 'orderby' => 'title', 'order' => 'ASC', ); $posts = query_posts($args); 

Aber das wird alle Posts von House, Dubstep zeigen, was in Ordnung ist, aber es zeigt auch alle Posts von Musikfestivals, die nicht einmal in House und Dubstep Kategorie sind.

Hier ist mein HTML Code für checkboxes

  
  • Area:

  • All of London
  • North
  • East
  • South
  • West
  • Central
  • Music:

  • House
  • Techno
  • Trance
  • Electronica
  • Drum and Bass
  • Garage
  • Dubstep
  • Trap
  • Hip-Hop
  • R'n'B
  • Rock
  • Indie
  • Reggae
  • Retro 80's/90's
  • Party Bangers
  • Chart Hits
  • Search Type:

  • <!--
  • Everything
  • -->
  • Nightclubs
  • Events & Tickets
  • Live Venues
  • Artist Interviews
<!-- -->

Vielen Dank im Voraus für Ihre Hilfe.

Solutions Collecting From Web of "Wie übergebe ich mehrere Checkbox-Werte an die WordPress-Abfrage?"

OK, hier ist ein Versuch, aber ich kenne nicht die genaue Struktur Ihrer Kategorien Taxonomie, so dass es einige leichte Feinabstimmungen benötigen. Ich habe den HTML-Code Ihres Formulars aktualisiert, so dass er die vom Benutzer ausgewählten Werte verwendet. Dann gibt es einen PHP-Code-Block, der ein benutzerdefiniertes WP_Query , um die relevanten Beiträge anzuzeigen (die Sie bearbeiten können, wie Sie WP_Query , derzeit nur gibt eine ungeordnete Liste von Posts zurück)

HTML-Formular

  
    < ?php // Get the values from $_POST for area if($_POST['area']) { $a=$_POST['area'];} else { $a='';} ?>
  • Area:

  • All of London />
  • North />
  • East />
  • South />
  • West />
  • Central />
    < ?php // Get the values from $_POST for music if($_POST['music']) { $m=$_POST['music'];} else { $m[]='';} ?>
  • Music:

  • House />
  • Techno />
  • Trance />
  • Electronica />
  • Drum and Bass />
  • Garage />
  • Dubstep />
  • Trap />
  • Hip-Hop />
  • R'n'B />
  • Rock />
  • Indie />
  • Reggae />
  • Retro 80's/90's />
  • Party Bangers />
  • Chart Hits />
    < ?php // Get the values from $_POST for music if($_POST['occasion']) { $o=$_POST['occasion'];} else { $o[]='';} ?>
  • Search Type:

  • Nightclubs />
  • Events & Tickets />
  • Live Venues />
  • Artist Interviews />

PHP-Code (WP_Query)

 < ?php // Get the values from $_POST $a = ($_POST['area']); $m = ($_POST['music']); $o = ($_POST['occasion']); // Change the ID of the area category $a_tmp = get_category_by_slug( $a ); $a_catID[] = $a_tmp->term_id; // Get the ID of each music category // Do some conditional checks to make sure // that we're correctly indexing an array // and that output is an array for the later // use with array_merge() if ( is_array($m) ) { // If we already have an array it means // multiple checkboxes have been selected foreach( $m as $m_cat ){ $m_tmp = get_category_by_slug( $m_cat ); $m_catIDs[] = $m_tmp->term_id; } } else { // If we don't have an array then // only one checkbox has been // selected $m_tmp = get_category_by_slug( $m ); $m_catIDs[] = $m_tmp->term_id; } // Get the ID of each occasion category // with the checking as described above if ( is_array($o) ) { foreach( $o as $o_cat ){ $o_tmp = get_category_by_slug( $o_cat ); $o_catIDs[] = $o_tmp->term_id; } } else { $o_tmp = get_category_by_slug( $o ); $o_catIDs[] = $o_tmp->term_id; } // Concatenate the arrays $cat_IDs = array_merge($a_catID,$m_catIDs,$o_catIDs); // Build the WP_Query arguments $query_args = array ( 'post_type' => 'post', 'post_status' => 'publish', //'category__and' => $cat_IDs 'tax_query' => array( array( 'taxonomy' => 'category', 'field' => 'term_id', 'operator' => 'AND', 'terms' => $cat_IDs ), ) );//end $query_args; $the_query = new WP_Query($query_args); // The Loop to echo posts if ( $the_query->have_posts() ) { // if we have posts, echo opening 
    echo '
    '; while ( $the_query->have_posts() ) { // while we have posts, echo the title in an
  • $the_query->the_post(); echo '
  • ' . get_the_title() . '
  • '; } // echo the closing
    echo '
'; } else { // no posts found echo 'Nothing found.'; } wp_reset_postdata(); /* Restore original Post Data */ ?>

Ein paar Hinweise:

  • Sie müssen das Taxonomie-Setup überprüfen und sicherstellen, dass die Aufrufe von get_category_by_slug dem Kategorie-Slug übergeben werden
  • Ändert wahrscheinlich den von der Schleife ausgegebenen HTML-Code, so dass er mehr als ein