Ok, so the first part would require you to to alter the default news query and exclude the posts that belong to specific category. Paste that into functions.php of your theme:
// Modify news archive query
function df_custom_news_query($query) {
if (!is_admin() && is_post_type_archive('news') && $query->is_main_query() && empty($query->query_vars['suppress_filters'])) {
$query->set('category__not_in', array(4)); // change 4 to the ID of category you want to exclude (category D)
}
return $query;
}
add_filter('pre_get_posts', 'df_custom_news_query');
Please use that and see if you have this working. Then we’ll talk about custom query in a page that includes only selected category.