it-swarm.com.de

Übergeben von Formulareingaben an die Abfrage für mehrere Taxonomien

Ich bin dabei, eine Suchseite zu erstellen, um eine Abfrage für einen benutzerdefinierten Beitragstyp und die zugehörigen Meta- und Taxonomien durchzuführen. Schließlich würde ich mehrere Taxonomien abfragen und Werte mit denen im Meta vergleichen (dh - Beiträge mit foo zwischen X und Y finden).

Ich habe ein ziemlich gutes Verständnis der Abfragefunktion, dank der Beiträge von Otto und Scribu . Das Problem ist, ich habe Mühe, herauszufinden, wie die Variablen über ein Formular übergeben werden. Mein erster Versuch war es, die in diesem Beitrag empfohlene Methode auszuprobieren , aber ich gebe keine Ergebnisse zurück (Adressleiste zeigt: http://sitename.com/?brand=22. Hier ist mein erster Versuch ("Marke" ist einer meiner Taxonomienamen):

<form action="<?php echo home_url('/'); ?>" method="get">
    <p><?php wp_dropdown_categories('taxonomy=brand&name=brand'); ?></p>
    <p><input type="submit" value="Search!" /></p>
</form>

Wird ein einfaches HTML-Formular wie dieses ausreichen? Oder sollte ich eine Funktion in meiner functions.php-Datei erstellen?

Mein zweiter Versuch war, eine Funktion zu integrieren:

<?php
function get_terms_dropdown($taxonomies, $args){
    $myterms = get_terms($taxonomies, $args);
    $output ='<select multiple="yes" size="3" name="'.$taxonomies.'">';
    foreach($myterms as $term){
        $root_url = get_bloginfo('url');
        $term_taxonomy=$term->taxonomy;
        $term_slug=$term->slug;
        $term_name =$term->name;
        #$link = $root_url.'/'.$term_taxonomy.'/'.$term_slug;
        #$link = $term_taxonomy;
        $output .="<option value='".$term_name."'>".$term_name."</option>";
    }
    $output .="</select>";
return $output;
}
$args = array('orderby'=>'count','hide_empty'=>true);
?>


<form role="search" method="get" id="searchform" action="<?php bloginfo('home'); ?>">
<?php echo get_terms_dropdown(array('brand'), $args); ?>
<input type="submit" id="searchsubmit" value="Search" />
</form>

Aber auch hier kann ich das Formular nicht einreichen/Ergebnisse generieren.

Bin ich hier auf dem richtigen Weg? Anregungen sind willkommen.

1
nfaust

Sie erwähnen, dass Sie bei Ihrem ersten Versuch die URL http://sitename.com/?brand=22 erhalten, die korrekt ist, da Sie a verwendet haben get-Methode, aber Sie geben nicht an, welchen Code Sie für die Abfrage verwenden.

Persönlich benutze ich dies für mein Formular und würde mit wdalhaj vereinbaren, Post zu verwenden, anstatt zu bekommen

<form id="brandsearch" method="post" action="">
  <select name="brand" id="brand">
    <option value="">All</option>
<?php
$theterms = get_terms('brand', 'orderby=name');
foreach ($theterms AS $term) :
    echo "<option value='".$term->slug."'".($_POST['brand'] == $term->slug ? ' selected="selected"' : '').">".$term->name."</option>\n";
endforeach;
?>
  </select>
</form>

und dann zum Erstellen der Abfrage

$myquery['post_type'] = 'custom-post-name';
$myquery['posts_per_page'] = -1; // only used if you want all results on one page
$myquery['tax_query'] = array();

if (!empty($_POST['brand'])) :
    $brand = $_POST['brand'];
    $myquery['tax_query'][] = array(
        'taxonomy' => 'brand',
        'terms' => array($brand),
        'field' => 'slug',
    );
endif;

query_posts($myquery);

Sie können das Formular mithilfe einer Seitenvorlage oder eines Shortcodes in eine Standardseite einfügen (siehe http://codex.wordpress.org/Function_Reference/add_shortcode ). Am besten erstellen Sie jedoch eine Seitenvorlage für Ihre Suchanfrage und Suchergebnisse.

0
SarahA

Das ist eine knifflige Lösung, aber es funktioniert:

  1. Zuerst müssen Sie eine Seitenvorlage erstellen, dann eine Seite erstellen, die diese Vorlage verwendet, und ihr einen beliebigen Namen geben, beispielsweise "advanced_search" (Sie können sie von der Anzeige ausschließen, wenn Sie möchten).

  2. Nehmen Sie die Formularaktion auf dieser Seite vor (erweiterte Suche).

  3. Übergeben Sie nun die Daten über die reguläre Post-Methode und erhalten Sie sie in der zuvor erstellten Seitenvorlage über die superglobale Variable $ _POST [].

  4. Jetzt können Sie die Abfrage mit den Variablen durchführen, die Sie über die Post-Methode erhalten haben.

Hier sind weitere Tipps:

-Wenn es nicht funktioniert hat, können Sie immer sicher und effektiv mit der WordPress-Datenbank interagieren, indem Sie das $ wpdb-Objekt verwenden.

-Debuggen Sie die Abfragezeichenfolge, indem Sie sie mit folgendem Befehl wiederholen: <?php echo $query_string; ?>

es geht immer darum, wie man WordPress umgeht.

0
wdalhaj