Hey,
The reason the || doesn't work is a little strange but it makes sense if you think about it.
<?php if ( !(in_category('8')) || !(in_category('7')) || !(in_category('9'))) { ?>
translates to: if it's not in category 8 OR it's not in category 7 OR it's not in category 9.
For an statement using OR to be true, you need any part of it to be true:
True || Anything = True
False || False = False
And so with the statement you gave, if it's in, say, category 8, then you would end up with the following statement:
if ( false || true || true) which will always be true. (because in_category('8') will be true, (which reversed is false) in_category('7') will be false (which reversed is true)). And you only need one true for the whole thing to be true.
What you actually want is:
<?php if ( ! (in_category('8') || in_category('7') || in_category('9') )) { ?>
So if it's in either of those categories, the expression will evaluate to true, which negated is false.
Rob
****
(DeMorgan's Theorem states that NOT(a OR b OR c) is the same as (NOT a) AND (NOT b) AND (NOT c) which is how you can have the statement using ORs and the statement using ANDs doing exactly the same). My brain is all mushy but I think that's right :).