Maybe something like this? if i understand your question correctly.
SELECT
r.*
FROM recipe r
JOIN recipe_ingredients ri ON ri.id_recipe = r.id_recipe
JOIN ingredients i ON i.id_ingredient = ri.id_ingredient
JOIN recipes_tags rt ON rt.id_recipe = r.id_recipe
JOIN tags t ON t.id_tag = rt.id_tag
WHERE i.name = 'ziemniaki'
OR i.name = 'cebula'
AND t.tag = "tani"
OR t.tag = "łatwy"
GROUP BY r.id_recipe
HAVING COUNT(r.id_recipe) > 3 -- all 4 of the criteria have been met
;
see working FIDDLE for clarification
Basically what this does is it returns a row when one of the four criteria is met. along with that it also will only return recipes that have at least one of the ingredients and at least one of the tags. so when 4 (or more) rows are returned then the criteria is met for a recipe with the requested params