*/ class WPUPG_Blocks { /** * Register actions and filters. * * @since 3.0.0 */ public static function init() { add_action( 'init', array( __CLASS__, 'register_blocks' ) ); // Deprecation notice after 5.8.0. global $wp_version; if ( $wp_version && version_compare( $wp_version, '5.8', '<' ) ) { add_filter( 'block_categories', array( __CLASS__, 'block_categories' ) ); } else { add_filter( 'block_categories_all', array( __CLASS__, 'block_categories' ) ); } } /** * Register block categories. * * @since 3.0.0 * @param array $categories Existing block categories. */ public static function block_categories( $categories ) { return array_merge( $categories, array( array( 'slug' => 'wp-ultimate-post-grid', 'title' => 'WP Ultimate Post Grid', ), ) ); } /** * Register all blocks. * * @since 3.0.0 */ public static function register_blocks() { if ( function_exists( 'register_block_type' ) ) { $block_settings = array( 'attributes' => array( 'id' => array( 'type' => 'string', 'default' => '', ), 'align' => array( 'type' => 'string', 'default' => '', ), 'dynamic' => array( 'type' => 'string', 'default' => '', ), 'updated' => array( 'type' => 'number', 'default' => 0, ), ), 'render_callback' => array( __CLASS__, 'render_grid_with_filters_block' ), ); register_block_type( 'wp-ultimate-post-grid/grid-with-filters', $block_settings ); $block_settings['render_callback'] = array( __CLASS__, 'render_grid_block' ); register_block_type( 'wp-ultimate-post-grid/grid', $block_settings ); $block_settings['attributes']['filter'] = array( 'type' => 'string', 'default' => '', ); $block_settings['render_callback'] = array( __CLASS__, 'render_filter_block' ); register_block_type( 'wp-ultimate-post-grid/filter', $block_settings ); } } /** * Parse block attributes. * * @since 3.0.0 * @param mixed $atts Block attributes. */ public static function parse_atts( $atts ) { if ( isset( $atts['dynamic'] ) ) { $dynamic = trim( $atts['dynamic'] ); if ( $dynamic ) { $dynamic_atts = shortcode_parse_atts( $dynamic ); if ( $dynamic_atts ) { $atts = array_merge( $atts, $dynamic_atts ); } } } unset( $atts['dynamic'] ); return $atts; } /** * Render the grid with filters block. * * @since 3.0.0 * @param mixed $atts Block attributes. */ public static function render_grid_with_filters_block( $atts ) { $atts = self::parse_atts( $atts ); $output = ''; // Only do this for the Gutenberg Preview. if ( isset( $GLOBALS['wp']->query_vars['rest_route'] ) && '/wp/v2/block-renderer/wp-ultimate-post-grid/grid-with-filters' === $GLOBALS['wp']->query_vars['rest_route'] ) { $grid = WPUPG_Grid_Manager::get_grid( $atts['id'] ); if ( $grid ) { $template_css = WPUPG_Template_Manager::get_template_css( $grid->template() ); $output .= ''; } } $output .= WPUPG_Shortcode::grid_with_filters_shortcode( $atts ); return $output; } /** * Render the grid block. * * @since 3.0.0 * @param mixed $atts Block attributes. */ public static function render_grid_block( $atts ) { $atts = self::parse_atts( $atts ); $output = ''; // Only do this for the Gutenberg Preview. if ( isset( $GLOBALS['wp']->query_vars['rest_route'] ) && '/wp/v2/block-renderer/wp-ultimate-post-grid/grid' === $GLOBALS['wp']->query_vars['rest_route'] ) { $grid = WPUPG_Grid_Manager::get_grid( $atts['id'] ); if ( $grid ) { $template_css = WPUPG_Template_Manager::get_template_css( $grid->template() ); $output .= ''; } } $output .= WPUPG_Shortcode::grid_shortcode( $atts ); return $output; } /** * Render the filter block. * * @since 3.0.0 * @param mixed $atts Block attributes. */ public static function render_filter_block( $atts ) { $atts = self::parse_atts( $atts ); return WPUPG_Shortcode::filter_shortcode( $atts ); } } WPUPG_Blocks::init();