| @@ 24-62 (lines=39) @@ | ||
| 21 | * |
|
| 22 | * @return WP_Block_Type|false The registered block type on success, or false on failure. |
|
| 23 | */ |
|
| 24 | function jetpack_register_block( $slug, $args = array() ) { |
|
| 25 | if ( 0 !== strpos( $slug, 'jetpack/' ) && ! strpos( $slug, '/' ) ) { |
|
| 26 | _doing_it_wrong( 'jetpack_register_block', 'Prefix the block with jetpack/ ', '7.1.0' ); |
|
| 27 | $slug = 'jetpack/' . $slug; |
|
| 28 | } |
|
| 29 | ||
| 30 | if ( isset( $args['version_requirements'] ) |
|
| 31 | && ! Jetpack_Gutenberg::is_gutenberg_version_available( $args['version_requirements'], $slug ) ) { |
|
| 32 | return false; |
|
| 33 | } |
|
| 34 | ||
| 35 | // Checking whether block is registered to ensure it isn't registered twice. |
|
| 36 | if ( Jetpack_Gutenberg::is_registered( $slug ) ) { |
|
| 37 | return false; |
|
| 38 | } |
|
| 39 | ||
| 40 | $feature_name = Jetpack_Gutenberg::remove_extension_prefix( $slug ); |
|
| 41 | // If the block is dynamic, and a Jetpack block, wrap the render_callback to check availability. |
|
| 42 | if ( |
|
| 43 | isset( $args['plan_check'] ) |
|
| 44 | && true === $args['plan_check'] |
|
| 45 | ) { |
|
| 46 | if ( isset( $args['render_callback'] ) ) { |
|
| 47 | $args['render_callback'] = Jetpack_Gutenberg::get_render_callback_with_availability_check( $feature_name, $args['render_callback'] ); |
|
| 48 | } |
|
| 49 | $method_name = 'set_availability_for_plan'; |
|
| 50 | } else { |
|
| 51 | $method_name = 'set_extension_available'; |
|
| 52 | } |
|
| 53 | ||
| 54 | add_action( |
|
| 55 | 'jetpack_register_gutenberg_extensions', |
|
| 56 | function() use ( $feature_name, $method_name ) { |
|
| 57 | call_user_func( array( 'Jetpack_Gutenberg', $method_name ), $feature_name ); |
|
| 58 | } |
|
| 59 | ); |
|
| 60 | ||
| 61 | return register_block_type( $slug, $args ); |
|
| 62 | } |
|
| 63 | ||
| 64 | /** |
|
| 65 | * Helper function to register a Jetpack Gutenberg plugin |
|
| @@ 40-83 (lines=44) @@ | ||
| 37 | * |
|
| 38 | * @return WP_Block_Type|false The registered block type on success, or false on failure. |
|
| 39 | */ |
|
| 40 | public static function jetpack_register_block( $slug, $args = array() ) { |
|
| 41 | if ( 0 !== strpos( $slug, 'jetpack/' ) && ! strpos( $slug, '/' ) ) { |
|
| 42 | _doing_it_wrong( 'jetpack_register_block', 'Prefix the block with jetpack/ ', 'Jetpack 9.0.0' ); |
|
| 43 | $slug = 'jetpack/' . $slug; |
|
| 44 | } |
|
| 45 | ||
| 46 | if ( |
|
| 47 | isset( $args['version_requirements'] ) |
|
| 48 | && ! self::is_gutenberg_version_available( $args['version_requirements'], $slug ) |
|
| 49 | ) { |
|
| 50 | return false; |
|
| 51 | } |
|
| 52 | ||
| 53 | // Checking whether block is registered to ensure it isn't registered twice. |
|
| 54 | if ( self::is_registered( $slug ) ) { |
|
| 55 | return false; |
|
| 56 | } |
|
| 57 | ||
| 58 | $feature_name = self::remove_extension_prefix( $slug ); |
|
| 59 | ||
| 60 | // This is only useful in Jetpack. |
|
| 61 | if ( class_exists( Jetpack_Gutenberg::class ) ) { |
|
| 62 | // If the block is dynamic, and a Jetpack block, wrap the render_callback to check availability. |
|
| 63 | if ( |
|
| 64 | isset( $args['plan_check'] ) |
|
| 65 | && true === $args['plan_check'] |
|
| 66 | ) { |
|
| 67 | if ( isset( $args['render_callback'] ) ) { |
|
| 68 | $args['render_callback'] = Jetpack_Gutenberg::get_render_callback_with_availability_check( $feature_name, $args['render_callback'] ); |
|
| 69 | } |
|
| 70 | $method_name = 'set_availability_for_plan'; |
|
| 71 | } else { |
|
| 72 | $method_name = 'set_extension_available'; |
|
| 73 | } |
|
| 74 | ||
| 75 | add_action( |
|
| 76 | 'jetpack_register_gutenberg_extensions', |
|
| 77 | function() use ( $feature_name, $method_name ) { |
|
| 78 | call_user_func( array( 'Jetpack_Gutenberg', $method_name ), $feature_name ); |
|
| 79 | } |
|
| 80 | ); |
|
| 81 | } |
|
| 82 | return register_block_type( $slug, $args ); |
|
| 83 | } |
|
| 84 | ||
| 85 | /** |
|
| 86 | * Check if an extension/block is already registered |
|