Как выполнить поиск в определенной категории таксономии

Моя проблема - это: у Меня есть 3 пользовательских taxonomies, скажем, 'автор', 'заголовок' и 'редактор', каждый обратился к обычным сообщениям. Скажем, у меня есть post_1, который имеет в поле 'автора' 'jorge borges' и post_2, который имеет 'луч bradbury'.

Я пытаюсь иметь поисковую форму с выпадающим меню, содержащим три taxonomies и текстовое поле, так, чтобы, если я выбираю, т.е. 'автор' и поиск 'jorge borges', результатом был post_1.

Другие два taxonomies должны работать как это также.

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

Таким образом, как я делаю это?

0
30.01.2014, 10:58
3 ответа

попробуйте это: Поместите этот код в свою поисковую форму:

<form method="get" id="searchform" action="<?php bloginfo('url'); ?>/search">
<?php 
$args = array(
   'public'   => true,
   '_builtin' => false
); 
$output = 'objects';
$operator = 'and'; 
$taxonomies = get_taxonomies( $args, $output, $operator ); 
$my_tax_array = array('your_taxonomy_name1','your_taxonomy_name2',); //make array of your taxonomies
echo "<select id='my_select_taxonomy' name='my_select_taxonomy'>";
echo "<option value='0'>----</option>";
if ( $taxonomies ) {
  foreach ( $taxonomies  as $taxonomy ) {
    if (in_array($taxonomy->name, $my_tax_array)){
        echo "<option value='{$taxonomy->name}'>{$taxonomy->label}</option>";
    }
  }
}
echo "</select><br />";
?>
<input type="text" value="" name="search_field" id="search_field" />
<input type="submit" id="searchsubmit" value="Search" /> 

И в Вашей странице результатов поиска это:

<?php

$search_field = $_GET['search_field'];
$my_select_taxonomy = $_GET['my_select_taxonomy'];

$args = array(
'post_type' => 'post',
'tax_query' => array(
    array(
        'taxonomy' => $my_select_taxonomy,
        'field' => 'slug',
        'terms' => $search_field,
    )
)
);
$query = new WP_Query( $args );

?>
0
20.02.2020, 01:32
  • 1
    Это, кажется, не работает... Я должен изменить те же значения? И что Вы имеете в виду точно со страницей результатов поиска, search_form.php или search.php? –  user3252290 30.01.2014, 19:59
  • 2
    , я отредактировал эту часть: $my_tax_array = массив ('your_taxonomy_name1', 'your_taxonomy_name2'); ранее я оставил свои собственные имена taxonomies. Таким образом, необходимо изменить это место, вставляющее taxonomies имена. И search_form.php от имени файла, которое я предполагаю, - то, где Ваша форма, и search.php, которому я верю, - то, где Вы показываете свой поиск serults. Таким образом, моя "страница результатов поиска" является Вашим search.php :) –  Paulius Jakštas 31.01.2014, 12:02
  • 3
    Это не работает... Результаты поиска все еще не смотрят в условиях таксономии, но в содержании сообщения. Я предполагаю, что вставляю вторую часть в неправильное место. Можно ли вставить целую search.php страницу? –  user3252290 01.02.2014, 13:39
  • 4
    хорошо решен! недостающая часть должна была добавить название запроса в цикле: <?php if( $query->have_posts() ) : ?> <?php while($query->have_posts() ) : $query->the_post(); ?> –  user3252290 13.02.2014, 23:34

Это смогло делать с этим плагином (Relevanssi):

http://wordpress.org/support/topic/plugin-relevanssi-sorting-filtering-search-results

0
20.02.2020, 01:32

Это не работает... Результаты поиска все еще не смотрят в условиях таксономии, но в содержании сообщения. Я предполагаю, что вставляю вторую часть в неправильное место.

Это - то, как мой search.php похож:

<?php

if( !defined( 'ABSPATH' ) ) {
exit;
}


$search_field = $_GET['search_field'];
$my_select_taxonomy = $_GET['my_select_taxonomy'];

$args = array(
'post_type' => 'post',
'tax_query' => array(
array(
    'taxonomy' => $my_select_taxonomy,
    'field' => 'slug',
    'terms' => $search_field,
)
)
);
$query = new WP_Query( $args );

get_header(); 
?>
<div id="content-search" class="<?php echo implode( ' ', responsive_get_content_classes()); ?>" >

//content..

</div>

Можно протестировать на себя здесь:
тестовая страница
тогда как значения таксономии для авторов 'gio ponti' или 'aavv'

Я использую дочернюю тему Быстро реагирующей темы, может это быть любой справки.

0
20.02.2020, 01:32
  • 1
    @paulius какие-либо новости о том, как зафиксировать его? –  user3252290 03.02.2014, 21:02
  • 2
    В поисковой форме Вы используете этот код: <входной тип = "текстовый" класс = "полевое" название = "s" идентификатор = "s" заполнитель = ""/> попытка изменяются на это: <входной тип = "текстовое" значение = "" называют = "search_field" идентификатор = "search_field"/> –  Paulius Jakštas 05.02.2014, 11:23
  • 3
    КОНЦА-d RewriteRule./index.php [L] </IfModule> #, не работающий все же. какая-либо идея @PauliusJakštas? –  user3252290 11.02.2014, 12:59
  • 4
    я просто заметил, что, при попытке искать очень обычные слова, он регулярно работает: это означает, что просто игнорирует часть пользовательского запроса. На самом деле результаты также прибывают из страниц, в то время как в args мы помещаем только сообщения. Как это может быть возможно? –  user3252290 11.02.2014, 15:33
  • 5
    Попытайтесь включить пустой поиск, добавить этот код к Вашему functions.php файлу: function make_blank_search ($query){ global $wp_query; if (isset($_GET['s']) && $_GET['s']==''){ //if search parameter is blank, do not return false $wp_query->set('s',' '); $wp_query->is_search=true; } return $query; } add_action('pre_get_posts','make_blank_search'); –  Paulius Jakštas 13.02.2014, 15:13

Теги

Похожие вопросы