Настройка функции поиска?


Я перестраиваю этот веб-сайт - http://www.mediwales.com/news на платформе WP. Я борюсь с областью поиска в сером поле.

Я удаляю регион и дату, поэтому нам не нужно беспокоиться об этом, но как я могу настроить поиск по ключевому слову И сектору?

Я создал пользовательскую таксономию под названием "новости", которая будет представлять сектора. Насколько я знаю, обычный поиск просто ищет ключевое слово по всему сайту. Как я могу настроить поиск для поиска ключевого слова, но если выбран сектор, выполните поиск только по ключевому слову в этом секторе? А затем отобразите результаты.

ОБНОВЛЕНИЕ:

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

Это то, что у меня есть до сих пор. Похоже, он ищет ключевые слова и выбирает новости. Я не могу выбрать сектора (например, ссылку вверху), хотя? Как я мог связать эти два явления? Затем поиск будет выполняться в этом секторе (таксономия) для ключевого слова.

Author: fuxia, 2012-02-16

1 answers

Вы можете использовать pre_get_posts hoot для фильтрации поискового запроса только по выбранным секторам, примерно так:

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

Обновление: Поместите код сверху на functions.php файл вашей темы, а затем вам нужно вывести категории (сектора) в виде полей формы внутри формы поиска, поэтому попробуйте следующее:

<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
Author: Bainternet, 2012-02-16 20:26:59