web-dev-qa-db-fra.com

Passer des entrées de formulaire dans une requête multi-taxonomie

Je suis en train de créer une page de recherche pour effectuer une requête sur un type d'article personnalisé et sur sa méta et taxonomie associée. En fin de compte, je voudrais interroger plusieurs taxonomies et comparer les valeurs à celles de la méta (c'est-à-dire - rechercher les publications avec foo entre X et Y).

J'ai une assez bonne compréhension de la fonction de requête, grâce aux publications de Otto et de Scribu . Le problème est que j'ai du mal à comprendre comment passer les variables via un formulaire. Ma première tentative a été d'essayer la méthode recommandée dans ce message , mais je ne renvoie aucun résultat (la barre d'adresse indique: http://sitename.com/?brand=22. Voici ma première tentative. ("marque" est l'un de mes noms de taxonomie):

<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>

Un simple formulaire HTML tel que celui-ci suffira-t-il? Ou devrais-je créer une fonction dans mon fichier functions.php?

Ma deuxième tentative a été d'intégrer une fonction:

<?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>

Mais encore une fois, je ne suis pas en mesure de soumettre le formulaire/générer des résultats.

Suis-je sur la bonne voie ici? Toutes les suggestions sont appréciées.

1
nfaust

Vous mentionnez que lors de votre première tentative, vous obtenez l'URL http://sitename.com/?brand=22 qui est correcte car vous avez utilisé un get, mais vous ne dites pas quel code vous utilisez pour la requête.

Personnellement, je l’utilise pour ma forme et serais d’accord avec wdalhaj pour utiliser post au lieu de get

<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>

puis pour construire la requête

$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);

Vous pouvez insérer le formulaire dans une page standard à l'aide d'un modèle de page ou d'un shortcode (voir http://codex.wordpress.org/Function_Reference/add_shortcode ). mais vous ferez mieux de créer un modèle de page pour votre requête de recherche et vos résultats.

0
SarahA

C'est une solution un peu délicate, mais ça marche:

  1. Vous devez d’abord créer un modèle de page, puis créer une page qui utilise ce modèle et lui attribuer un nom, par exemple "advanced_search" (vous pouvez l’exclure si vous le souhaitez).

  2. Transformez le formulaire en action sur cette page (recherche avancée).

  3. Passez maintenant les données via la méthode de publication habituelle et recevez-les dans le modèle de page que vous avez déjà créé via la variable super globale $ _POST [].

  4. Vous pouvez maintenant effectuer une requête en utilisant les variables que vous avez obtenues via la méthode post.

Voici plus de conseils:

-Si cela n'a pas fonctionné, vous pouvez toujours interagir de manière sûre et efficace avec la base de données WordPress à l'aide de l'objet $ wpdb.

- Déboguer la chaîne de requête en la répercutant avec: <?php echo $query_string; ?>

sa toujours sur la façon de travailler autour de WordPress.

0
wdalhaj