$props ) { $defaults[ $key ] = isset( $props['default'] ) ? $props['default'] : ''; } return $defaults; } /** * Parse shortcode attribute values. * * @since 5.4.0 * @param string $id Shortcode ID. * @param array $atts Input values. * @param array $extra Additional attributes. * @return array Parsed values. */ function su_parse_shortcode_atts( $id, $atts, $extra = array() ) { return shortcode_atts( array_merge( su_get_shortcode_defaults( $id ), $extra ), $atts, $id ); } /** * Custom do_shortcode function for nested shortcodes * * @since 5.0.4 * @param string $content Shortcode content. * @param string $pre First shortcode letter. * @return string Formatted content. */ function su_do_nested_shortcodes_alt( $content, $pre ) { if ( strpos( $content, '[_' ) !== false ) { $content = preg_replace( '@(\[_*)_(' . $pre . '|/)@', '$1$2', $content ); } return do_shortcode( $content ); } /** * Remove underscores from nested shortcodes. * * @since 5.0.4 * @param string $content String with nested shortcodes. * @param string $shortcode Shortcode tag name (without prefix). * @return string Parsed string. */ function su_do_nested_shortcodes( $content, $shortcode ) { if ( get_option( 'su_option_do_nested_shortcodes_alt' ) ) { return su_do_nested_shortcodes_alt( $content, substr( $shortcode, 0, 1 ) ); } $prefix = su_get_shortcode_prefix(); if ( strpos( $content, '[_' . $prefix . $shortcode ) !== false ) { $content = str_replace( array( '[_' . $prefix . $shortcode, '[_/' . $prefix . $shortcode ), array( '[' . $prefix . $shortcode, '[/' . $prefix . $shortcode ), $content ); return do_shortcode( $content ); } return do_shortcode( wptexturize( $content ) ); } /** * Get shortcode prefix. * * @since 5.0.5 * @return string Shortcode prefix. */ function su_get_shortcode_prefix() { return get_option( 'su_option_prefix' ); } /** * Do shortcodes in attributes. * * Replace braces with square brackets: {shortcode} => [shortcode], applies do_shortcode() filter. * * @since 5.0.5 * @param string $value Attribute value with shortcodes. * @return string Parsed string. */ function su_do_attribute( $value, $kses = false ) { $value = str_replace( array( '{', '}' ), array( '[', ']' ), $value ); $value = do_shortcode( $value ); return $kses ? wp_kses_post( $value ) : esc_attr( $value ); }