Пользовательский поиск по произвольному типу сообщения, мета-метам и полям поиска
-
-
[Вы видели этот ответ] (http://wordpress.stackexchange.com/questions/66815/exnding-search-query-with-additional-sentence-value/66904#66904)?[Have you seen this answer](http://wordpress.stackexchange.com/questions/66815/extending-search-query-with-additional-sentence-value/66904#66904)?
- 0
- 2013-07-08
- kaiser
-
Я бы не стал,но это кажется очень сложным для того,что я пытаюсь сделать?I'd not but it seems massively complex for what I'm trying to do?
- 0
- 2013-07-08
- James J
-
«чрезвычайно сложный» означает,что вы не хотите читать так много текста,верно?: P Прочтите,пожалуйста.Это сведет вас к минимуму на полпути."massively complex" means you don't want read that much text, right? :P Please read it. It will bring you down half the way minimum.
- 1
- 2013-07-08
- kaiser
-
Есть ли прогресс по этому вопросу?Any progress on that question?
- 0
- 2013-08-01
- kaiser
-
2 ответ
- голосов
-
- 2013-07-08
Если вы хотите расширить свой запрос,вы должны расширить его с помощью
pre_get_posts
-фильтра. Затем просто выполните «Пользовательское поле» или мета-запрос .add_action( 'pre_get_posts', 'wpse105969_extended_search' ); function wpse105969_extended_search( $query ) { // Make sure we got a search query // and we're only modifying the main query. if ( ! $query->is_main_query() AND '' === $query->get( 's' ) AND 'your_custom_post_type' === $query->get( 'post_type' ) ) return $query; // Alter whatever you need: Make, Model, etc. $query->set( 'meta_query', array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); return $query; }
If you want to extend your query, you should extend it through the
pre_get_posts
-filter. Then just do a "Custom Field" or meta query.add_action( 'pre_get_posts', 'wpse105969_extended_search' ); function wpse105969_extended_search( $query ) { // Make sure we got a search query // and we're only modifying the main query. if ( ! $query->is_main_query() AND '' === $query->get( 's' ) AND 'your_custom_post_type' === $query->get( 'post_type' ) ) return $query; // Alter whatever you need: Make, Model, etc. $query->set( 'meta_query', array( 'relation' => 'OR', array( 'key' => 'color', 'value' => 'blue', 'compare' => 'NOT LIKE' ), array( 'key' => 'price', 'value' => array( 20, 100 ), 'type' => 'numeric', 'compare' => 'BETWEEN' ) ) ); return $query; }
-
Привет,спасибо за ответ - я на самом деле не использую поле 's',которое требуется для обычного поиска в Wordpress (я ищу только метаданные для настраиваемых типов сообщений).Есть ли способ НЕ использовать поле 's' в форме поиска,пытаясь найти информацию об этом.Еще раз спасибо.Hi thanks for the answer - I dont actually use the 's' field that normal wordpress searches require (im only search for the custom post types meta details). Is there anyway to NOT use the 's' field in the search form, struggling to find info on this. Thanks again.
- 0
- 2013-07-08
- James J
-
Кроме того,я добавил ваш код в свойfunctions.php и добавил в свои поля,но когда я сохраняю,он ломает wordpress (без ошибок).Ничего из WordPress не работает (навигация,сообщения и т. Д.).Also, I've added your code to my functions.php and added in my fields but when i save it breaks wordpress (no errors). Nothing from wordpress works (nav, posts etc).
- 0
- 2013-07-08
- James J
-
@JamesJ Пожалуйста,опубликуйте обновление с _вашим_ кодом.Подсказка: вы изменили имя пользовательского типа сообщения и установили ли для WP_DEBUG значениеtrue?@JamesJ Please post an update with _your_ code. Hint: Did you change the custom post type name and did you set `WP_DEBUG` to `true`?
- 0
- 2013-07-09
- kaiser
-
- 2018-08-07
Вот код. Вы можете изменить
$post_type
и$custom_fields
в соответствии со своими потребностями.function extend_admin_search( $query ) { // Extend search for document post type $post_type = 'document'; // Custom fields to search for $custom_fields = array( "_file_name", ); if( ! is_admin() ) return; if ( $query->query['post_type'] != $post_type ) return; $search_term = $query->query_vars['s']; // Set to empty, otherwise it won't find anything $query->query_vars['s'] = ''; if ( $search_term != '' ) { $meta_query = array( 'relation' => 'OR' ); foreach( $custom_fields as $custom_field ) { array_push( $meta_query, array( 'key' => $custom_field, 'value' => $search_term, 'compare' => 'LIKE' )); } $query->set( 'meta_query', $meta_query ); }; } add_action( 'pre_get_posts', 'extend_admin_search' );
Here’s the code. You can change
$post_type
and$custom_fields
according to your needs.function extend_admin_search( $query ) { // Extend search for document post type $post_type = 'document'; // Custom fields to search for $custom_fields = array( "_file_name", ); if( ! is_admin() ) return; if ( $query->query['post_type'] != $post_type ) return; $search_term = $query->query_vars['s']; // Set to empty, otherwise it won't find anything $query->query_vars['s'] = ''; if ( $search_term != '' ) { $meta_query = array( 'relation' => 'OR' ); foreach( $custom_fields as $custom_field ) { array_push( $meta_query, array( 'key' => $custom_field, 'value' => $search_term, 'compare' => 'LIKE' )); } $query->set( 'meta_query', $meta_query ); }; } add_action( 'pre_get_posts', 'extend_admin_search' );
Я хотел бы создать форму поиска для определенного настраиваемого типа сообщений (автомобиль) и иметь фильтры для настраиваемых мета полей этого типа сообщений (цена,возраст) и настраиваемых таксономий (производитель). Это полностью заменит поиск по сайтам и станет единственным доступным поиском,поэтому я собирался использовать search.php в своем настраиваемом шаблоне.
Мне нравится,что поиск выглядит примерно так:
Найдите наши автомобили
Сделать (выберите поле со всеми пользовательскими таксономиями - Audi,BMW и т. д.).
Модель (обычное поле ввода,чтобы люди могли вводить что угодно).
Превышение цен (выберите поле с ценами от 1000)
Возраст (установите флажок с такими вариантами,как до 1 года,до 3 лет,до 5 лет,до 10 лет).
Я новичок в настраиваемых полях и действительно не знаю,с чего начать (я нашел несколько примеров в Google,но ни один из них не делает именно то,к чему я стремлюсь). Я тоже не очень хотел использовать плагин. Я предполагаю,что в search.php я беру данные,переданные из формы,и использую их для создания $ args для передачи в WP_Query?
Может кто-нибудь указать мне правильное направление,пожалуйста? Заранее спасибо