Custom post type archive organized by category

Don’t use query posts ever, my emphasis. It is just a bad function to use

Note: This function isn’t meant to be used by plugins or themes. As explained later, there are better, more performant options to alter the main query. query_posts() is overly simplistic and problematic way to modify main query of a page by replacing it with new instance of the query. It is inefficient (re-runs SQL queries) and will outright fail in some circumstances (especially often when dealing with posts pagination).

Also, wp_reset_query should be used for query_posts. wp_reset_postdata is meant to be used for WP_Query and get_posts, which is the correct functions to use to create custom queries.

For additional info, check out this post I recently done.

get_posts uses the same parameters as WP_Query. Whenever you work with taxonomies and terms and in general with a tax_query, the default field that is used to retrieve the relevant info is term_id. slug is also valid and can also be used.

field (string) – Select taxonomy term by (‘term_id'(default) or ‘slug’)

So change $term->name to either $term->term_id or $term->slug