Поиск по произвольным полям
-
Здравствуйте
Нужно доработать код, который добавляет поиск по метаполю в обычный поиск.
Данный код ищет по заголовку, контенту и одному метаполю.
Нужно отключить поиск по контенту и сделать поиск по двум метаполям. В итоге поиск должен работать по заголовку и двум полям.
Есть много других вариантов, как реализовать такой поиск, в том числе плагины, но мне нужно доработать именно этот код. Конкретно данный код работает очень быстро и не нагружает сервер если в таблицу wp_postmeta добавить индекс для поля meta_key
Вот сам кодadd_filter( 'posts_clauses', 'km_metadata_search' );
# Добавляем поиск по метаполям в базовый поиск WordPress
function km_metadata_search( $clauses ){
global $wpdb;
if( ! is_search() || ! is_main_query() )
return $clauses;
$clauses['join'] .= " LEFT JOIN $wpdb->postmeta kmpm ON (ID = kmpm.post_id)";
$clauses['where'] = preg_replace(
"/OR +\( *$wpdb->posts.post_content +LIKE +('[^']+')/",
"OR (kmpm.meta_value LIKE $1) $0",
$clauses['where']
);
// если нужно искать в указанном метаполе
$clauses['where'] .= $wpdb->prepare(' AND kmpm.meta_key = %s', 'my_meta_key' );
$clauses['distinct'] = 'DISTINCT';
// дебаг итогового запроса
0 && add_filter( 'posts_request', function( $sql ){ die( $sql ); } );
return $clauses;
}
- Для ответа на тему необходимо авторизоваться.