false,
'id' => '',
), $attr, 'siteorigin_widget' );
$attr[ 'class' ] = html_entity_decode( $attr[ 'class' ] );
$attr[ 'class' ] = apply_filters( 'siteorigin_panels_widget_class', $attr[ 'class' ] );
$the_widget = ! empty( $attr[ 'class' ] ) ? SiteOrigin_Panels::get_widget_instance( $attr['class'] ) : null;
if( ! empty( $the_widget ) ) {
$data = self::decode_data( $content );
$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();
}
}
/**
* Get the shortcode for a specific widget
*
* @param $widget
* @param $args
* @param $instance
*
* @return string
*/
static function get_shortcode( $widget, $args, $instance ){
unset( $instance[ 'panels_info' ] );
$data = array(
'instance' => $instance,
'args' => $args,
);
// This allows other plugins to implement their own shortcode. For example, to work when Page Builder isn't active
$shortcode_name = apply_filters( 'siteorigin_panels_cache_shortcode', 'siteorigin_widget', $widget, $instance, $args );
$shortcode = '[' . $shortcode_name . ' ';
$shortcode .= 'class="' . htmlentities( preg_replace( '/\\\\+/', '\\\\\\\\', get_class( $widget ) ) ) . '"]';
$shortcode .= self::encode_data( $data ) ;
$shortcode .= '[/' . $shortcode_name . ']';
return $shortcode;
}
/**
* A filter to replace widgets with
*/
static function widget_html( $html, $widget, $args, $instance ){
if(
empty( $GLOBALS[ 'SITEORIGIN_PANELS_POST_CONTENT_RENDER' ] ) ||
// Don't try create HTML if there already is some
! empty( $html ) ||
! is_object( $widget ) ||
// Skip for known text based widgets
in_array( get_class( $widget ), self::$text_widgets )
) {
return $html;
}
return self::get_shortcode( $widget, $args, $instance );
}
static function encode_data( $data ){
return '';
}
static function decode_data( $string ){
preg_match( '/value="([^"]*)"/', trim( $string ), $matches );
if( ! empty( $matches[1] ) ) {
$data = json_decode( html_entity_decode( $matches[1], ENT_QUOTES ), true );
return $data;
}
else {
return array();
}
}
}