/**
 * SoundCloud shortcode handler
 * @param  {string|array}  $atts     The attributes passed to the shortcode like [soundcloud attr1="value" /].
 *                                   Is an empty string when no arguments are given.
 * @param  {string}        $content  The content between non-self closing [soundcloud]…[/soundcloud] tags.
 * @return {string}                  Widget embed code HTML
 */
function soundcloud_shortcode($atts, $content = null)
{
    // Custom shortcode options
    $shortcode_options = array_merge(array('url' => trim($content)), is_array($atts) ? $atts : array());
    // Turn shortcode option "param" (param=value&param2=value) into array
    $shortcode_params = array();
    if (isset($shortcode_options['params'])) {
        parse_str(html_entity_decode($shortcode_options['params']), $shortcode_params);
    }
    $shortcode_options['params'] = $shortcode_params;
    // User preference options
    $plugin_options = array_filter(array('iframe' => soundcloud_get_option('player_iframe', true), 'width' => soundcloud_get_option('player_width'), 'height' => soundcloud_url_has_tracklist($shortcode_options['url']) ? soundcloud_get_option('player_height_multi') : soundcloud_get_option('player_height'), 'params' => array_filter(array('auto_play' => soundcloud_get_option('auto_play'), 'show_comments' => soundcloud_get_option('show_comments'), 'color' => soundcloud_get_option('color'), 'theme_color' => soundcloud_get_option('theme_color')))));
    // Needs to be an array
    if (!isset($plugin_options['params'])) {
        $plugin_options['params'] = array();
    }
    // plugin options < shortcode options
    $options = array_merge($plugin_options, $shortcode_options);
    // plugin params < shortcode params
    $options['params'] = array_merge($plugin_options['params'], $shortcode_options['params']);
    // The "url" option is required
    if (!isset($options['url'])) {
        return '';
    } else {
        $options['url'] = trim($options['url']);
    }
    // Both "width" and "height" need to be integers
    if (isset($options['width']) && !preg_match('/^\\d+$/', $options['width'])) {
        // set to 0 so oEmbed will use the default 100% and WordPress themes will leave it alone
        $options['width'] = 0;
    }
    if (isset($options['height']) && !preg_match('/^\\d+$/', $options['height'])) {
        unset($options['height']);
    }
    // The "iframe" option must be true to load the iframe widget
    $options['iframe'] = isset($options['iframe']) ? $options['iframe'] : '';
    $iframe = soundcloud_booleanize($options['iframe']) ? preg_match('/api.soundcloud.com/i', $options['url']) : false;
    // Return html embed code
    if ($iframe) {
        return soundcloud_iframe_widget($options);
    } else {
        return soundcloud_flash_widget($options);
    }
}
Esempio n. 2
0
/**
 * Iframe widget embed code
 *
 * @param  array $options Parameters
 *
 * @return string            Iframe embed code
 */
function soundcloud_iframe_widget($options)
{
    // Build URL
    $url = set_url_scheme('https://w.soundcloud.com/player/?' . http_build_query($options['params']));
    // Set default width if not defined
    $width = isset($options['width']) && $options['width'] !== 0 ? $options['width'] : '100%';
    // Set default height if not defined
    $height = isset($options['height']) && $options['height'] !== 0 ? $options['height'] : (soundcloud_url_has_tracklist($options['url']) || isset($options['params']['visual']) && soundcloud_booleanize($options['params']['visual']) ? '450' : '166');
    return sprintf('<iframe width="%s" height="%s" scrolling="no" frameborder="no" src="%s"></iframe>', $width, $height, $url);
}