Поиск по произвольным полям
Нашел небольшое дополнение, которое ищет по произвольным полям
но поиск работает сразу по всем полям, а нужно, чтобы работал только по заданным
В итоге вот код
function cf_search_join( $join ) { global $wpdb; if ( is_search() ) { $join .=' LEFT JOIN '.$wpdb->postmeta. ' ON '. $wpdb->posts . '.ID = ' . $wpdb->postmeta . '.post_id '; } return $join; } add_filter('posts_join', 'cf_search_join' ); function cf_search_where( $where ) { global $pagenow, $wpdb; if ( is_search() ) { $where = preg_replace( "/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/", "(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where ); } return $where; } add_filter( 'posts_where', 'cf_search_where' ); function cf_search_distinct( $where ) { global $wpdb; if ( is_search() ) { return "DISTINCT"; } return $where; } add_filter( 'posts_distinct', 'cf_search_distinct' );
Через pre_get_posts измени параметры запроса на станице is_search(). Используй параметры meta_query.
Примерно так:
то есть этот код нужно добавить в файл search.php
И целиком он должен примерно вот так?
Действительно поиск начал работать если убрать
Но я хочу реализовать, поиск следующим образом. Чтобы он по прежнему работал по заголовкам, но в качестве дополнения так же срабатывал и по произвольным полям. Кстати вариант который я выложил выше, мне не подходит, поскольку он сильно начинает грузить хостинг
Его нужно добавить в functions.php и не рекомендую удалять указанные строки... Этот код будет работать для базового (основного) запроса на странице поиска.
А если делать так как ты сделал: создавать отдельный запрос, то не нужны никакие хуки, просто передай параметры в WP_Query( параметры ) и все...
Можно в where добавить нужные ключи
Или так
А можно полностью код выложить с этим дополнением, а то я по разному по побывал их добавить но не работает, видимо где-то скобка пропущена.
Я не дебажил, но должно работать