Current File : /home/kelaby89/sergio-cuchi.tattoo/wp-content/plugins/so-widgets-bundle/base/inc/shortcode.php |
<?php
/**
* A simple shortcode that just renders a widget.
*
* @param string $content
*
* @return string
*/
function siteorigin_widget_shortcode( $attr, $content = '' ) {
$attr = shortcode_atts(
array(
'class' => false,
'id' => '',
),
$attr,
'panels_widget'
);
$attr['class'] = html_entity_decode( $attr['class'] );
global $wp_widget_factory;
if ( ! empty( $attr['class'] ) && isset( $wp_widget_factory->widgets[ $attr['class'] ] ) ) {
$the_widget = $wp_widget_factory->widgets[ $attr['class'] ];
// Parse the value of the shortcode
preg_match( '/value="(.*?)"/', trim( $content ), $matches );
if ( ! empty( $matches[1] ) ) {
$data = json_decode( html_entity_decode( $matches[1] ), true );
}
$widget_args = ! empty( $data['args'] ) ? $data['args'] : array();
$widget_instance = ! empty( $data['instance'] ) ? $data['instance'] : array();
$widget_args = siteorigin_widget_shortcode_escape_widget_data( $widget_args );
$widget_instance = siteorigin_widget_shortcode_escape_widget_data( $widget_instance );
$widget_args = wp_parse_args(
array(
'before_widget' => '',
'after_widget' => '',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
),
$widget_args
);
ob_start();
$the_widget->widget( $widget_args, $widget_instance );
return ob_get_clean();
}
}
function siteorigin_widget_shortcode_escape_widget_data( $data ) {
try {
$escaped_data = array();
foreach ( $data as $key => $value ) {
if ( is_array( $value ) ) {
$escaped_data[ $key ] = siteorigin_widget_shortcode_escape_widget_data( $value );
} else {
$escaped_data[ $key ] = esc_html( $value );
}
}
return $escaped_data;
} catch ( Exception $e ) {
// There was an error, return empty array.
return array();
}
}
function siteorigin_widget_shortcode_register() {
global $shortcode_tags;
// Only load this as a fallback if Page Builder hasn't already registered it.
if ( empty( $shortcode_tags['siteorigin_widget'] ) ) {
add_shortcode( 'siteorigin_widget', 'siteorigin_widget_shortcode' );
}
}
add_action( 'plugins_loaded', 'siteorigin_widget_shortcode_register', 15 );
/**
* Tell Page Builder we'll be using the custom siteorigin_widget shortcode
*
* @return string
*/
function siteorigin_widget_shortcode_panels_cache_shortcode( $shortcode, $widget ) {
if ( is_a( $widget, 'SiteOrigin_Widget' ) ) {
$shortcode = 'siteorigin_widget';
}
return $shortcode;
}
add_filter( 'siteorigin_panels_cache_shortcode', 'siteorigin_widget_shortcode_panels_cache_shortcode', 10, 2 );