Как исключить совпадение слова «класс» в поиске?

Я хотел бы исключить слово «класс» из соответствия поисковому термину «девушка».

На сайте я помогаю управлять, поисковый термин «девушка» довольно заметен. К сожалению, это соответствует общему использованию «класса» в содержании многих, многих сообщений WP, что приводит к множеству нерелевантных результатов. Тем не менее, я по-прежнему хочу, чтобы сообщения со словом «класс» были в возможных совпадениях, я просто не хочу, чтобы он соответствовал «lass» для «class».

Вот три возможных сообщения:

1. <a href="http://img.wordpressask.com/posts/image-large.jpg"><img class="aligncenter size-full wp-image-1234" alt="Image" src="http://img.wordpressask.com/posts/image.jpg"" width="600" height="300" /></a> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam. 2. <a href="http://img.wordpressask.com/posts/image-large.jpg"><img class="aligncenter size-full wp-image-1234" alt="Image" src="http://img.wordpressask.com/posts/image.jpg"" width="600" height="300" /></a> Lass is lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam. 3. Lass is lorem ipsum dolor sit amet, consectetur adipisicing elit. Ipsum et veritatis pariatur deleniti excepturi beatae voluptatum aspernatur voluptates rerum numquam. 

Если бы я искал «lass», мне бы хотелось, чтобы результаты 2 и 3 были возвращены, но не результат 1.

Я видел отличные результаты в этих двух вопросах, но они не вполне соответствовали всем, что я ищу. Мы ценим любые предложения.

Solutions Collecting From Web of "Как исключить совпадение слова «класс» в поиске?"

Вы можете попытаться использовать фильтр posts_search как это было предложено @Kaiser в первой приведенной вами ссылке. Вот одна идея:

 function filter_search($sql){ global $wpdb; if( strpos(get_query_var("s"),"lass") !== false AND strpos(get_query_var("s"),"class") === false ){ $sql .= " AND {$wpdb->posts}.post_title NOT LIKE '%class%'"; $sql .= " AND {$wpdb->posts}.post_content NOT LIKE '%class%'"; } return $sql; } add_filter( 'posts_search', 'filter_search'); 

чтобы проверить, содержит ли поисковый запрос lass а не class а затем модифицирует поисковый запрос, чтобы исключить class .

Изменение в SQL будет выглядеть так:

До:

 AND (((wp_posts.post_title LIKE '%lass%') OR (wp_posts.post_content LIKE '%lass%'))) 

После:

 AND (((wp_posts.post_title LIKE '%lass%') OR (wp_posts.post_content LIKE '%lass%'))) AND wp_posts.post_title NOT LIKE '%class%' AND wp_posts.post_content NOT LIKE '%class%' 

Обновить:

Можешь попробовать

  function filter_search($sql){ global $wpdb; if( strpos(get_query_var("s"),"lass") !== false AND strpos(get_query_var("s"),"class") === false ){ $sql .= " AND ( {$wpdb->posts}.post_content LIKE 'lass %'"; $sql .= " OR {$wpdb->posts}.post_content LIKE '% lass %'"; $sql .= " OR {$wpdb->posts}.post_content LIKE '% lass' )"; } return $sql; } add_filter( 'posts_search', 'filter_search'); 

если вы хотите настроить точное слово lass в сообщении.