web-dev-qa-db-fra.com

Personnaliser la fonction de recherche?

Je reconstruis ce site Web - http://www.mediwales.com/news sur la plate-forme WP. Je me bats avec la zone de recherche dans la boîte grise.

Je supprime la région et la date pour que nous n'ayons pas à nous en préoccuper, mais comment puis-je configurer la recherche par mot-clé ET par secteur?

J'ai créé une taxonomie personnalisée appelée "nouvelles" qui représentera les secteurs. Pour autant que je sache, la recherche normale ne fait que rechercher un mot clé dans tout le site. Comment puis-je configurer la recherche pour rechercher un mot clé mais si un secteur est sélectionné, recherchez uniquement le mot clé dans ce secteur? Et ensuite afficher les résultats.

METTRE À JOUR:

                        <?php $args = array(
    'show_option_all'    => '',
    'orderby'            => 'name',
    'order'              => 'ASC',
    'show_last_update'   => 0,
    'style'              => '',
    'show_count'         => 0,
    'hide_empty'         => 1,
    'use_desc_for_title' => 1,
    'child_of'           => 0,
    'feed'               => '',
    'feed_type'          => '',
    'feed_image'         => '',
    'exclude'            => '',
    'exclude_tree'       => '',
    'include'            => '',
    'hierarchical'       => true,
    'title_li'           => '',
    'show_option_none'   => __('No categories'),
    'number'             => NULL,
    'echo'               => 1,
    'depth'              => 0,
    'current_category'   => 0,
    'pad_counts'         => 0,
    'taxonomy'           => 'news',
    'walker'             => 'Walker_Category' ); 
    ?>

    <?php echo wp_list_categories($args); ?>


<?php
function Search_with_in_a_tax( &$query ) {
    if ( is_search() && isset($_GET['sector_array'])) {
        $tax_query = array(
             array(
                'taxonomy' => 'news',
                'terms' => $_GET['sector_array'],
                'field' => 'term_id',
              )
         );
         //turn it into a WP_Tax_Query object
        $tax_query = new WP_Tax_Query($tax_query);
        $query->set("tax_query", $tax_query);
    }
}
add_action('pre_get_posts', 'Search_with_in_a_tax', 1);
?>  

<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
<div><input type="text" size="18" value="" name="s" id="s" />
<input type="submit" id="searchsubmit" value="Search" class="btn" />
</div>
</form>

C'est ce que j'ai jusqu'ici. Il semble rechercher les mots-clés et choisir les nouvelles. Je ne peux cependant pas sélectionner les secteurs (comme le lien en haut)? Comment pourrais-je relier les deux? La recherche chercherait alors le mot clé dans ce secteur (taxonomie).

1
Rob

Vous pouvez utiliser pre_get_posts hoot pour filtrer la requête de recherche uniquement sur certains secteurs, comme ceci:

function Search_with_in_a_tax( &$query ) {
    if ( is_search() && isset($_GET['sector_array'])) {
        $tax_query = array(
             array(
                'taxonomy' => 'news',
                'terms' => $_GET['sector_array'],
                'field' => 'term_id',
              )
         );
         //turn it into a WP_Tax_Query object
        $tax_query = new WP_Tax_Query($tax_query);
        $query->set("tax_query", $tax_query);
    }
}
add_action('pre_get_posts', 'Search_with_in_a_tax', 1);

Mise à jour: Placez le code ci-dessus dans le fichier functions.php de votre thème. Vous devez ensuite exporter les catégories (secteurs) sous forme de champs de formulaire à l'intérieur de votre fichier. formulaire de recherche alors essayez ceci:

<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
    <div>
        <label for="s">Keyword</label>
        <input type="text" size="18" value="" name="s" id="s" />
    </div>
    <div>
        <label for="sector_array">Sectors</label>
        <?php
        $categories=get_categories(array('orderby' => 'name','order' => 'ASC'));
        foreach ($categories as $category) {
            echo '<input type="checkbox" name="sector_array[]" value="'.$category->cat_ID.'">'.$category->cat_name;
        }
        ?>
    </div>
    <div>
        <input type="submit" id="searchsubmit" value="Search" class="btn" />
    </div>
</form>
1
Bainternet