2018-01-26 15:50:15 +01:00

72 lines
2.0 KiB
PHP

<?php
/**
* A simple shortcode that just renders a
*
* @param $attr
* @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 = 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_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 );