Assuming you’re using the function is_category_or_sub() as given on http://valendesigns.com/wordpress/is-category-or-subcategory-wp-function/
That function takes category id as the argument, not the slug. The string “gamenews” here when type-casted to an integer becomes 0 which is an ancestor for every other category. Can you try changing the function code to this-
// If is category or subcategory of $cat
if (!function_exists('is_category_or_sub')) {
function is_category_or_sub($cat = 0) {
if(is_numeric($cat)) {
$cat_id = $cat;
} elseif(is_string($cat)) {
$cat = get_term_by('slug', $cat, 'category');
$cat_id = $cat->term_id;
} else {
return false; // neither id nor slug
}
foreach (get_the_category() as $cat) {
if ($cat_id == $cat->cat_ID || cat_is_ancestor_of($cat_id, $cat)) return true;
}
return false;
}
}
This function now supports both id & slug