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 = wp_parse_args( array(
'before_widget' => '',
'after_widget' => '',
'before_title' => '
',
), $widget_args );
ob_start();
$the_widget->widget( $widget_args, $widget_instance );
return ob_get_clean();
}
}
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
*
* @param $shortcode
* @param $widget
*
* @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 );