Intereting Posts
Отображение таблицы базы данных в backend wordpress Как Woocommerce хранит вариационные атрибуты и как их можно извлекать для каждой вариации? Получайте зарегистрированные пользовательские поля или отправляйте мета, даже если они пусты Как восстановить визуальный редактор в WordPress Как назначить настраиваемый шаблон для страницы «Объявления» (в разделе «Настройки отображения главной страницы») Географический поиск с таксономической структурой Где я могу хранить общий межсайтовый текст (например, заголовки, заголовки и т. Д.) Как обрабатывать сообщение перед публикацией? Функция оповещения, отправляющая уведомление по электронной почте Изменить дату публикации в меню для публикации заголовка Правильный способ enqueue jquery-ui Я удалил вредоносное ПО с нашего сайта, однако, когда я снова попытался найти слово из Google, он все еще там Создавать отзывчивые миниатюры одинакового размера WordPress CPT slug и конфликты страниц Ошибка контура перенаправления после входа в систему из персонализированного сообщения типа post

Поля пользовательского поиска и поддержка AJAX

Я пытаюсь переписать поиск. Я использовал действие pre_get_posts и фильтры posts_where и posts_join . Страница загружается с помощью моих пользовательских фильтров. Но я не могу заставить его работать с AJAX. Как я могу заставить его работать? Вероятно, действие и фильтры не чередуются.

Код фильтров

 function search_filter_where( $where = '' ) { global $wpdb; if(is_main_query() && is_search()) { if(get_query_var('a_lyon')) { $where .= " AND (sp_pm1.meta_key = 'post_code' AND sp_pm1.meta_value BETWEEN '69000' AND '69009') "; } if(get_query_var('autour_de_lyon')) { $where .= " AND (sp_pm2.meta_key = 'post_code' AND sp_pm2.meta_value BETWEEN '69000' AND '69999' OR sp_pm2.meta_key = 'post_code' AND sp_pm2.meta_value BETWEEN '38200' AND '38299') "; } if(get_query_var('when') && get_query_var('when') != '') { $time = strtotime(get_query_var('when')); if($time != -1) { $date = date('Ym-d', $time); $where .= " AND ({$wpdb->posts}.post_date BETWEEN '{$date} 00:00:00' AND '{$date} 23:59:59') "; } } if(get_query_var('gratuit')) { $where .= " AND (sp_pm3.meta_key = 'price' AND (sp_pm3.meta_value IS NULL OR wp_postmeta.meta_value = 0 OR wp_postmeta.meta_value = '')) "; } } return $where; } add_filter('posts_where', 'search_filter_where'); function search_posts_join( $join = '' ) { global $wpdb; if(is_main_query() && is_search()) { if(get_query_var('a_lyon')) { $join .= " INNER JOIN $wpdb->postmeta sp_pm1 ON ({$wpdb->posts}.ID = sp_pm1.post_id) "; } if(get_query_var('autour_de_lyon')) { $join .= " INNER JOIN $wpdb->postmeta sp_pm2 ON ({$wpdb->posts}.ID = sp_pm2.post_id) "; } if(get_query_var('gratuit')) { $join .= " LEFT JOIN $wpdb->postmeta sp_pm3 ON ({$wpdb->posts}.ID = sp_pm3.post_id AND (wp_postmeta.meta_key IS NULL OR wp_postmeta.meta_key LIKE 'price')) "; } } return $join; } add_filter('posts_join','search_posts_join'); add_action( 'pre_get_posts', function( WP_Query $query ) { if (is_main_query() && $query->is_search()) { $meta_query = array('relation' => 'AND'); if(get_query_var('jeune_public')) $meta_query[] = array( 'key' => 'jeune_public', 'value' => '1', 'compare' => '=' ); if(get_query_var('gratuit')) $meta_query[] = array( 'key' => 'price', 'value' => array('', '0'), 'compare' => 'IN' ); if(get_query_var('location') && get_query_var('location') != '') $meta_query[] = array( 'key' => 'location', 'value' => get_query_var('location'), 'compare' => 'LIKE' ); $query->set('meta_query', $meta_query); } }); 

Поисковый код AJAX

 add_action( 'wp_ajax_search_posts', 'em_ajax_search_posts' ); add_action( 'wp_ajax_nopriv_search_posts', 'em_ajax_search_posts' ); function em_ajax_search_posts() { global $wp_query, $wpdb; $page = (int) $_GET['page']; $posts_per_page = get_option('posts_per_page'); $args = array( 'posts_per_page' => $posts_per_page, 'order' => 'DESC', 'paged' => $page, 's' => $_GET['s'], 'when' => $_GET['when'], 'location' => $_GET['location'], 'a_lyon' => $_GET['a_lyon'], ); $wp_query = new wp_query( $args ); echo get_template_part( 'page-templates/nillloop-stylefive' ); die; }