This is an issue I've had for several version sof WordPress. I'm always doing workarounds to handle it, but it seems to me that it *should* work like this. Maybe I'm missing something.
as an example, if I use:
if(! is_search() || ! is_404())
in a template file (doesn't have to be the above - it can be if(! is_home() || ! is_front_page()) or if(! is_category() || ! is_archive()) - any combination of using more than on item with the "!" and || together) the statement is completley ignored.
if(! is_search()) works fine on it's own, as does if(! is_404()). but putting them together, separated by a "||", it's ignored on both pages.
Is this a bug? Or is there something I'm missing in regards to how PHP works?