Стандартный поиск в WordPress весьма простой. Вот пример непосредственно SQL-запроса из вашего случая (первого, остальные некорректны изначально):
SELECT SQL_CALC_FOUND_ROWS wp_posts.ID
FROM wp_posts
WHERE 1=1
AND (((wp_posts.post_title LIKE '%рыба%')
OR (wp_posts.post_excerpt LIKE '%рыба%')
OR (wp_posts.post_content LIKE '%рыба%'))
AND ((wp_posts.post_title LIKE '%печенье%') // Вот тут оператор AND, то есть WP смотрит вхождение обеих слов
OR (wp_posts.post_excerpt LIKE '%печенье%')
OR (wp_posts.post_content LIKE '%печенье%')))
AND wp_posts.post_type IN ('post', 'page', 'attachment')
AND (wp_posts.post_status = 'publish'
OR wp_posts.post_author = 1
AND wp_posts.post_status = 'private')
ORDER BY (CASE
WHEN wp_posts.post_title LIKE '%рыба печенье%'
THEN 1
WHEN wp_posts.post_title LIKE '%рыба%'
AND wp_posts.post_title LIKE '%печенье%'
THEN 2
WHEN wp_posts.post_title LIKE '%рыба%'
OR wp_posts.post_title LIKE '%печенье%'
THEN 3
WHEN wp_posts.post_excerpt LIKE '%рыба печенье%'
THEN 4
WHEN wp_posts.post_content LIKE '%рыба печенье%'
THEN 5
ELSE 6 END), wp_posts.post_date DESC
LIMIT 0, 10
Если в поиске вводить "рыба -печенье", то будут выведены результаты где есть "рыба" и нету "печенье". Это по сути единственный оператор, который есть в стандартном поиске.
Сам код, который формирует WHERE часть запроса,
смотрите тут.
Как видно по коду (и задокументировано в этом файле в комментах выше), есть переменная $sentence, которая отвечает за поиск фразы целиком, есть переменная $exact. Фильтров там не густо. В общем, изучайте код. Возможно, проще будет написать свой запрос. Возможно, удастся модифицировать стандартный через фильтр posts_search. Впрочем, найти по нему документацию задачка еще та :) Возможно, найдете что-то полезное тут:
wordpress.stackexchange.com/questions/112723/exten...
https://gist.github.com/mbijon/4979627
stackoverflow.com/questions/9221604/how-to-use-cus...