Может кто-то сталкивался с такой проблемой:
нужен поиск в обычных поста + фильтр по таксономии, которая прикручена к этим постам.
Вот код формы поиска:
<div class="search">
<?php
$args = array(
'show_option_all' => 'Часть тела',
'echo' => 0,
'hide_empty' => 0,
'name' => 'in_mesto',
'class' => 'select search-select select-part',
'taxonomy' => 'cat_mesto',
);
$dropdowncatsmesto = wp_dropdown_categories($args);
$argst = array(
'show_option_all' => 'Стиль',
'echo' => 0,
'hide_empty' => 0,
'name' => 'in_stil',
'class' => 'select search-select select-style',
'taxonomy' => 'cat_stil',
);
$dropdowncatsstil = wp_dropdown_categories($argst);
?>
<form id="searchform" role="search" method="get" action="<?php echo home_url( '/' ); ?>" >
<input name="s" id="s" placeholder="Название" class="search-input" value="<?php echo get_search_query() ?>" >
<div class="search_item">
<?php echo $dropdowncatsmesto; ?>
</div>
<div class="search_item">
<?php echo $dropdowncatsstil; ?>
</div>
<div class="search_item find"><input type="submit" name="submit" id="searchsubmit" class="submit search-button" value="Найти татуировку" /></div>
<button class="search-button_mob"></button>
</form>
</div>
Прописал в файле functions.php где искать:
add_filter( 'posts_where', 'title_like_posts_where', 10, 2 );
function title_like_posts_where( $where, &$wp_query ) {
global $wpdb;
if ( $post_title_like = $wp_query->get( 'post_title_like' ) ) {
$where .= ' AND ' . $wpdb->posts . '.post_title LIKE \'% ' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '\'
OR '. $wpdb->posts . '.post_title LIKE \'' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\'
OR '. $wpdb->posts . '.post_content LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '\'
OR '. $wpdb->posts . '.post_content LIKE \'' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\'
OR '. $wpdb->posts . '.post_title LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\'
OR '. $wpdb->posts . '.post_content LIKE \'%' . esc_sql( $wpdb->esc_like( $post_title_like ) ) . '%\' ' ;
}
return $where;
}
И на странице результатов поиска формирую цыкл:
if ( $_GET['s'] != '' && $_GET['in_mesto'] >= '1' && $_GET['in_stil'] >= '1' ) {
$args = array(
'post_type' => 'post',
'paged' => get_query_var( 'paged' ),
'posts_per_page' => '-1',
'post_title_like' => $_GET['s'],
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'cat_mesto',
'field' => 'term_id',
'terms' => $_GET['in_mesto'],
),
array(
'taxonomy' => 'cat_stil',
'field' => 'term_id',
'terms' => $_GET['in_stil'],
)
)
);
}
$filter = new WP_Query( $args );
Вот тут и вылазит моя головна боль. По слову ищет без проблем, но фильтрации по таксономии нету. Такое ощущение, что tax_query вовсе не отрабатывает.
Куда копать, что искать уже не пойму.
Подскажите, где и что искать то…