Настройка функции поиска?
Я перестраиваю этот веб-сайт - 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>
Это то, что у меня есть до сих пор. Похоже, он ищет ключевые слова и выбирает новости. Я не могу выбрать сектора (например, ссылку вверху), хотя? Как я мог связать эти два явления? Затем поиск будет выполняться в этом секторе (таксономия) для ключевого слова.
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>