shortcode_atts() combines any user provided parameters ($atts) with the array of defaults you provide and returns the merged array.
Function Reference/shortcode atts
In your example above $atts['size'] doesn’t exist and thus results in an undefined index notice. You want to either store the returned array in a variable or (like you are currently doing) use PHP’s extract function to create individual variables from each element in the array. After using extract(), $size, $id, and $group exist and are already set to the proper values.
Edit:
Just a minor side note, there’s an errant comma in your code. Should be:
'group' => ''
Hi Big Bagel,
There shouldn’t be a notice since I’m setting up the default value for size to be ‘1/2’ even if the user doesn’t call it.
Actually I think that the problem was related to the extract function.
I was able to fix it using the following line instead:
$atts = shortcode_atts( array( 'id' => '', 'size' => '1/2', 'group' => '', 'showtitle' => true, 'showicon' => true, 'showbody' => true, 'icon' => ''), $atts );
Yes, there should be a notice. $atts is whatever parameters the user provides. When this shortcode is used, only $atts['id'] exists:
[media id=81]
The function shotcode_atts() then takes that array and merges it with the defaults you provide, returning the result. If you used:
$merged = shortcode_atts( array( 'id' => '', 'size' => '1/2', 'group' => '', 'showtitle' => true, 'showicon' => true, 'showbody' => true, 'icon' => ''), $atts );
Then $merged would be an array of all the proper values and $atts would still only be an array of whatever the user provided. Your new code in effect merges the given and default parameters then overwrites the $atts array with the new array. Using extract(), like you did before, automatically creates a variable that can be immediately used for each key in the returned array ($id, $size, $group, etc.).
Some good shortcode references:
Shortcode API
http://planetozh.com/blog/2008/03/wordpress-25-shortcodes-api-overview/
http://aaron.jorb.in/blog/2010/02/wordpress-shortcodes-a-how-to-by-example/#.TwyTGG9SQsI
http://wp.smashingmagazine.com/2009/02/02/mastering-wordpress-shortcodes/
http://wp.tutsplus.com/tutorials/getting-started-with-wordpress-shortcodes/
Thanks for posting your solution, @moikirsch!
I had the same problem, where the extract function (which appears in the Codex example) seems to serve no purpose.