Modify shortcode to work with custom post types

This part of the code is what defines the arguments that can be passed with the shortcode:

extract(shortcode_atts(array(
        "posts" => '8',
        "columns" => '4',
        "category" => '',
        "style" => 'text-normal',
        "image_height" => 'auto',
        "show_date" => 'true',
        "excerpt" => 'true',
    ), $atts));

This allows you to later on use this values as $posts, $columns and so forth. If no value is passed in the shortcode, the default value will be used. In this case $posts = 8 (number posts to show)

This is the query that gets the posts based on the values passed:

$args = array(
     'post_status' => 'publish',
     'post_type' => 'post',
     'category_name' => $category,
     'posts_per_page' => $posts
);

So, if you want to be able to pick the post type, by passing it via the shortcode, you do something like:

extract(shortcode_atts(array(
            "post_type" => 'post',
            "posts" => '8',
            "columns" => '4',
            "category" => '',
            "style" => 'text-normal',
            "image_height" => 'auto',
            "show_date" => 'true',
            "excerpt" => 'true',
        ), $atts));

You can modify the query to use that value:

$args = array(
     'post_status' => 'publish',
     'post_type' => $post_type,
     'category_name' => $category,
     'posts_per_page' => $posts
);

When writing the shortcode you can do [blog_posts post_type="my_custom_post_type"]

The same idea can be done with the custom taxonomy. If you are only using one custom post type and that will never change, then you can skip the first step and just change the query directly. Also check out the codex to understand how wp_query works, and what values it expects:

http://codex.wordpress.org/Class_Reference/WP_Query