PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Campaigns / Shortcodes / ShortcodeRenderController.php
give / src / Campaigns / Shortcodes Last commit date
CampaignCommentsShortcode.php 3 days ago CampaignDonationsShortcode.php 10 months ago CampaignDonorsShortcode.php 10 months ago CampaignFormShortcode.php 10 months ago CampaignGoalShortcode.php 10 months ago CampaignGridShortcode.php 10 months ago CampaignShortcode.php 10 months ago CampaignStatsShortcode.php 10 months ago ShortcodeRenderController.php 10 months ago
ShortcodeRenderController.php
74 lines
1 <?php
2
3 namespace Give\Campaigns\Shortcodes;
4
5 /**
6 * Controller for rendering blocks in shortcode context.
7 *
8 * This controller ensures that WordPress block functions like get_block_wrapper_attributes()
9 * work properly when rendering blocks through shortcodes by setting up the proper
10 * block context that WordPress expects.
11 *
12 * @since 4.7.0
13 */
14 class ShortcodeRenderController
15 {
16 /**
17 * Renders a block file with proper WordPress block context.
18 *
19 * This method temporarily sets up the block context that WordPress block functions
20 * expect, renders the block file, then restores the previous context.
21 *
22 * @since 4.7.0
23 *
24 * @param string $renderFilePath The absolute path to the block render file
25 * @param string $blockName The registered block name (e.g., 'givewp/campaign-stats-block')
26 * @param array $attributes The block attributes
27 * @param array $extraVars Optional. Additional variables to make available in the render file
28 *
29 * @return string The rendered block HTML
30 */
31 public static function renderWithBlockContext(
32 string $renderFilePath,
33 string $blockName,
34 array $attributes,
35 array $extraVars = []
36 ): string {
37 // Create a proper parsed block structure
38 $parsed_block = [
39 'blockName' => $blockName,
40 'attrs' => $attributes,
41 ];
42
43 // Create a proper WP_Block instance if the block type is registered
44 $block_type = \WP_Block_Type_Registry::get_instance()->get_registered($blockName);
45 if ($block_type) {
46 $block = new \WP_Block($parsed_block, []);
47 } else {
48 // Fallback to mock object if block type isn't registered
49 $block = (object) [
50 'blockName' => $blockName,
51 'attributes' => $attributes,
52 ];
53 }
54
55 // Set the block context for WordPress block supports (needed for get_block_wrapper_attributes)
56 $previous_block_to_render = \WP_Block_Supports::$block_to_render;
57 \WP_Block_Supports::$block_to_render = $parsed_block;
58
59 // Extract extra variables to make them available in the render file
60 if (!empty($extraVars)) {
61 extract($extraVars, EXTR_SKIP);
62 }
63
64 ob_start();
65 include $renderFilePath;
66 $output = ob_get_clean();
67
68 // Restore the previous block context
69 \WP_Block_Supports::$block_to_render = $previous_block_to_render;
70
71 return $output;
72 }
73 }
74