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' => '

', 'after_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(); } } }