Files
szkoleniauryzaj.pl/wp-content/plugins/widget-shortcode/includes/class-widget-shortcode-gutenberg.php
2024-11-10 21:08:49 +01:00

77 lines
1.9 KiB
PHP

<?php
/**
* Gutenberg compatibility for Widget Shortcode plugin
*
* @package Widget Shortcode
* @since 0.3.4
*/
class Widget_Shortcode_Gutenberg {
private static $instance = null;
/**
* Creates or returns an instance of this class.
*
* @return A single instance of this class.
*/
public static function get_instance() {
return null == self::$instance ? self::$instance = new self : self::$instance;
}
private function __construct() {
if ( ! function_exists( 'register_block_type' ) ) {
// Gutenberg is not active.
return;
}
add_action( 'init', array( $this, 'register_block' ) );
}
function register_block() {
wp_register_script(
'widget-shortcode-gutenberg',
WIDGET_SHORTCODE_URL . 'assets/block.js',
array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-components' ),
filemtime( WIDGET_SHORTCODE_DIR . 'assets/block.js' ),
true
);
$widgets = Widget_Shortcode::get_instance()->get_widgets_list();
array_unshift( $widgets, array( 'value' => '', 'label' => '' ) );
wp_localize_script( 'widget-shortcode-gutenberg', 'widgetShortcodeGutenberg', array(
'widgets' => $widgets,
) );
register_block_type( 'widget-shortcode/block', array(
'editor_script' => 'widget-shortcode-gutenberg',
'render_callback' => array( $this, 'render_callback' ),
'attributes' => array(
'id' => array(
'default' => '',
'type' => 'string',
),
'className' => array(
'default' => '',
'type' => 'string',
),
),
) );
}
/**
* Render the widget preview in Gutenberg window
*
* @return string
*/
function render_callback( $atts, $content ) {
if ( ! isset( $atts['id'] ) || empty( $atts['id'] ) ) {
return '<p>' . __( 'Select the widget you want to show.', 'widget-shortcode' ) . '</p>';
}
return Widget_Shortcode::get_instance()->do_widget( array(
'echo' => false,
'id' => $atts['id'],
'css_class' => $atts['className'],
) );
}
}