Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
give
/
src
/
Campaigns
/
Shortcodes
:
ShortcodeRenderController.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php namespace Give\Campaigns\Shortcodes; /** * Controller for rendering blocks in shortcode context. * * This controller ensures that WordPress block functions like get_block_wrapper_attributes() * work properly when rendering blocks through shortcodes by setting up the proper * block context that WordPress expects. * * @since 4.7.0 */ class ShortcodeRenderController { /** * Renders a block file with proper WordPress block context. * * This method temporarily sets up the block context that WordPress block functions * expect, renders the block file, then restores the previous context. * * @since 4.7.0 * * @param string $renderFilePath The absolute path to the block render file * @param string $blockName The registered block name (e.g., 'givewp/campaign-stats-block') * @param array $attributes The block attributes * @param array $extraVars Optional. Additional variables to make available in the render file * * @return string The rendered block HTML */ public static function renderWithBlockContext( string $renderFilePath, string $blockName, array $attributes, array $extraVars = [] ): string { // Create a proper parsed block structure $parsed_block = [ 'blockName' => $blockName, 'attrs' => $attributes, ]; // Create a proper WP_Block instance if the block type is registered $block_type = \WP_Block_Type_Registry::get_instance()->get_registered($blockName); if ($block_type) { $block = new \WP_Block($parsed_block, []); } else { // Fallback to mock object if block type isn't registered $block = (object) [ 'blockName' => $blockName, 'attributes' => $attributes, ]; } // Set the block context for WordPress block supports (needed for get_block_wrapper_attributes) $previous_block_to_render = \WP_Block_Supports::$block_to_render; \WP_Block_Supports::$block_to_render = $parsed_block; // Extract extra variables to make them available in the render file if (!empty($extraVars)) { extract($extraVars, EXTR_SKIP); } ob_start(); include $renderFilePath; $output = ob_get_clean(); // Restore the previous block context \WP_Block_Supports::$block_to_render = $previous_block_to_render; return $output; } }