В новых версиях wordpress для вывода списка постов только из текущей категории, без дочерних, можно использовать следующий код:

add_filter('posts_where', 'in_cat_only');
function in_cat_only($where) {
    global $wp_query;
    if ($cat = intval($wp_query->query_vars['cat'])) {
        $where = preg_replace('/term_taxonomy_id IN \(.*?\)/',"term_taxonomy_id IN ($cat)",$where);
    }
    return $where;
}

UPD Сергей Бирюков на одном из форумов предложил следующее решение (исправлено)

function no_children( $query ) {
    if ( ! is_admin() && $query->is_main_query() && $query->is_category() )
        $query->set( 'category__in', array( get_queried_object_id() ) );
}
add_action( 'pre_get_posts', 'no_children' );

UPD Та же фишка теперь и в виде плагина.