Hi everyone!
I am reading Brad Williams’ Professional WordPress Designer and Development book.
add_shortcode('hs', 'halloween_store_shortcode');
function halloween_store_shortcode ($atts, $content=null)
{
//setting defaults
extract(shortcode_atts(array('show'=>'')));
}
Eventually, within the content we insert a shortcode, such as this one: [hs show=price].
I am having hard time with understanding what shortcode_atts and extract functions do, although I have read their definitions in Codex and PHP.net
- shortcode_atts:
Combine user attributes with known attributes and fill in defaults when needed.
Questions:
- what are user attributes? Does it refer to attributes that are sent from shortcode macros, e.g. [hs show=price]?
- What are ‘known attributes’ since I did not define any attributes prior to this code?
- “combine”? how does it combine them? Into any array?
I appreciate your help. I could simply memorize it, but I don’t think that memorizing it will help me become good at WordPress.
and extract()
Import variables from an array into the current symbol table.
I assume shortcode_atts returns an array. “imports variables into current SYMBOL TABLE”?
What is a symbol table?
I appreciate any help with helping me understand that piece of code. Below is a full function definition to give you some context:
function halloween_store_shortcode($atts, $content = null)
{
global $post;
//it is like setting the defaults
extract(shortcode_atts(array(
"show" => '' //sets attribute default
), $atts ));
//load options array
$hween_options_arr = get_option('halloween_options');
//load product data
$hween_product_data = get_post_meta($post->ID,'_halloween_product_data', true);
if ($show == 'sku')
{
$hs_show = !empty($hween_product_data['sku']) ? $hween_product_data['sku'] : '';
}
elseif ($show == 'price')
{
$hs_show = $hween_options_arr['currency_sign'];
$hs_show = !empty($hween_product_data['price']) ? $hs_show . $hween_product_data['price'] : '';
}
elseif ($show == 'weight')
{
$hs_show = !empty($hween_product_data['weight']) ? $hween_product_data['weight'] : '';
}
elseif ($show == 'color')
{
$hs_show = !empty($hween_product_data['color']) ? $hween_product_data['color'] : '';
}
elseif ($show == 'inventory' && !empty($hween_options_arr['show_inventory']))
{
$hs_show = !empty($hween_product_data['inventory']) ? $hween_product_data['inventory'] : '';
}
//return the shortcode value to display
return $hs_show;
}