Edit File by line
/home/zeestwma/richards.../wp-conte.../plugins/jetpack
File: class.jetpack-gutenberg.php
<?php //phpcs:ignore WordPress.Files.FileName.InvalidClassFileName
[0] Fix | Delete
/**
[1] Fix | Delete
* Handles server-side registration and use of all blocks and plugins available in Jetpack for the block editor, aka Gutenberg.
[2] Fix | Delete
* Works in tandem with client-side block registration via `index.json`
[3] Fix | Delete
*
[4] Fix | Delete
* @package automattic/jetpack
[5] Fix | Delete
*/
[6] Fix | Delete
[7] Fix | Delete
use Automattic\Jetpack\Assets;
[8] Fix | Delete
use Automattic\Jetpack\Blocks;
[9] Fix | Delete
use Automattic\Jetpack\Connection\Initial_State as Connection_Initial_State;
[10] Fix | Delete
use Automattic\Jetpack\Connection\Manager as Connection_Manager;
[11] Fix | Delete
use Automattic\Jetpack\Constants;
[12] Fix | Delete
use Automattic\Jetpack\Current_Plan as Jetpack_Plan;
[13] Fix | Delete
use Automattic\Jetpack\Modules;
[14] Fix | Delete
use Automattic\Jetpack\My_Jetpack\Initializer as My_Jetpack_Initializer;
[15] Fix | Delete
use Automattic\Jetpack\Status;
[16] Fix | Delete
use Automattic\Jetpack\Status\Host;
[17] Fix | Delete
[18] Fix | Delete
if ( ! defined( 'ABSPATH' ) ) {
[19] Fix | Delete
exit( 0 );
[20] Fix | Delete
}
[21] Fix | Delete
[22] Fix | Delete
// phpcs:disable Universal.Files.SeparateFunctionsFromOO.Mixed -- TODO: Move the functions and such to some other file.
[23] Fix | Delete
[24] Fix | Delete
/**
[25] Fix | Delete
* General Gutenberg editor specific functionality
[26] Fix | Delete
*/
[27] Fix | Delete
class Jetpack_Gutenberg {
[28] Fix | Delete
[29] Fix | Delete
/**
[30] Fix | Delete
* Only these extensions can be registered. Used to control availability of beta blocks.
[31] Fix | Delete
*
[32] Fix | Delete
* @var array|null Extensions allowed list or `null` if not initialized yet.
[33] Fix | Delete
* @see static::get_extensions()
[34] Fix | Delete
*/
[35] Fix | Delete
private static $extensions = null;
[36] Fix | Delete
[37] Fix | Delete
/**
[38] Fix | Delete
* Keeps track of the reasons why a given extension is unavailable.
[39] Fix | Delete
*
[40] Fix | Delete
* @var array Extensions availability information
[41] Fix | Delete
*/
[42] Fix | Delete
private static $availability = array();
[43] Fix | Delete
[44] Fix | Delete
/**
[45] Fix | Delete
* A cached array of the fully processed availability data. Keeps track of
[46] Fix | Delete
* reasons why an extension is unavailable or missing.
[47] Fix | Delete
*
[48] Fix | Delete
* @var array Extensions availability information.
[49] Fix | Delete
*/
[50] Fix | Delete
private static $cached_availability = null;
[51] Fix | Delete
[52] Fix | Delete
/**
[53] Fix | Delete
* Site-specific features available.
[54] Fix | Delete
* Their calculation can be expensive and slow, so we're caching it for the request.
[55] Fix | Delete
*
[56] Fix | Delete
* @var array Site-specific features
[57] Fix | Delete
*/
[58] Fix | Delete
private static $site_specific_features = array();
[59] Fix | Delete
[60] Fix | Delete
/**
[61] Fix | Delete
* List of deprecated blocks.
[62] Fix | Delete
*
[63] Fix | Delete
* @var array List of deprecated blocks.
[64] Fix | Delete
*/
[65] Fix | Delete
private static $deprecated_blocks = array(
[66] Fix | Delete
'jetpack/revue',
[67] Fix | Delete
);
[68] Fix | Delete
[69] Fix | Delete
/**
[70] Fix | Delete
* Storing the contents of the preset file.
[71] Fix | Delete
*
[72] Fix | Delete
* Already been json_decode.
[73] Fix | Delete
*
[74] Fix | Delete
* @var null|object JSON decoded object after first usage.
[75] Fix | Delete
*/
[76] Fix | Delete
private static $preset_cache = null;
[77] Fix | Delete
[78] Fix | Delete
/**
[79] Fix | Delete
* Keep track of JS loading strategies for each block that needs it.
[80] Fix | Delete
*
[81] Fix | Delete
* @var array<string, array|bool>
[82] Fix | Delete
*
[83] Fix | Delete
* @since 15.0
[84] Fix | Delete
*/
[85] Fix | Delete
private static $block_js_loading_strategies = array();
[86] Fix | Delete
[87] Fix | Delete
/**
[88] Fix | Delete
* Check to see if a minimum version of Gutenberg is available. Because a Gutenberg version is not available in
[89] Fix | Delete
* php if the Gutenberg plugin is not installed, if we know which minimum WP release has the required version we can
[90] Fix | Delete
* optionally fall back to that.
[91] Fix | Delete
*
[92] Fix | Delete
* @param array $version_requirements An array containing the required Gutenberg version and, if known, the WordPress version that was released with this minimum version.
[93] Fix | Delete
* @param string $slug The slug of the block or plugin that has the gutenberg version requirement.
[94] Fix | Delete
*
[95] Fix | Delete
* @since 8.3.0
[96] Fix | Delete
*
[97] Fix | Delete
* @return boolean True if the version of gutenberg required by the block or plugin is available.
[98] Fix | Delete
*/
[99] Fix | Delete
public static function is_gutenberg_version_available( $version_requirements, $slug ) {
[100] Fix | Delete
global $wp_version;
[101] Fix | Delete
[102] Fix | Delete
// Bail if we don't at least have the gutenberg version requirement, the WP version is optional.
[103] Fix | Delete
if ( empty( $version_requirements['gutenberg'] ) ) {
[104] Fix | Delete
return false;
[105] Fix | Delete
}
[106] Fix | Delete
[107] Fix | Delete
// If running a local dev build of gutenberg plugin GUTENBERG_DEVELOPMENT_MODE is set so assume correct version.
[108] Fix | Delete
if ( defined( 'GUTENBERG_DEVELOPMENT_MODE' ) && GUTENBERG_DEVELOPMENT_MODE ) {
[109] Fix | Delete
return true;
[110] Fix | Delete
}
[111] Fix | Delete
[112] Fix | Delete
$version_available = false;
[113] Fix | Delete
[114] Fix | Delete
// If running a production build of the gutenberg plugin then GUTENBERG_VERSION is set, otherwise if WP version
[115] Fix | Delete
// with required version of Gutenberg is known check that.
[116] Fix | Delete
if ( defined( 'GUTENBERG_VERSION' ) ) {
[117] Fix | Delete
$version_available = version_compare( GUTENBERG_VERSION, $version_requirements['gutenberg'], '>=' );
[118] Fix | Delete
} elseif ( ! empty( $version_requirements['wp'] ) ) {
[119] Fix | Delete
$version_available = version_compare( $wp_version, $version_requirements['wp'], '>=' );
[120] Fix | Delete
}
[121] Fix | Delete
[122] Fix | Delete
if ( ! $version_available ) {
[123] Fix | Delete
$slug = self::remove_extension_prefix( $slug );
[124] Fix | Delete
self::set_extension_unavailable(
[125] Fix | Delete
$slug,
[126] Fix | Delete
'incorrect_gutenberg_version',
[127] Fix | Delete
array(
[128] Fix | Delete
'required_feature' => $slug,
[129] Fix | Delete
'required_version' => $version_requirements,
[130] Fix | Delete
'current_version' => array(
[131] Fix | Delete
'wp' => $wp_version,
[132] Fix | Delete
'gutenberg' => defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : null,
[133] Fix | Delete
),
[134] Fix | Delete
)
[135] Fix | Delete
);
[136] Fix | Delete
}
[137] Fix | Delete
[138] Fix | Delete
return $version_available;
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
/**
[142] Fix | Delete
* Prepend the 'jetpack/' prefix to a block name
[143] Fix | Delete
*
[144] Fix | Delete
* @param string $block_name The block name.
[145] Fix | Delete
*
[146] Fix | Delete
* @return string The prefixed block name.
[147] Fix | Delete
*/
[148] Fix | Delete
private static function prepend_block_prefix( $block_name ) {
[149] Fix | Delete
return 'jetpack/' . $block_name;
[150] Fix | Delete
}
[151] Fix | Delete
[152] Fix | Delete
/**
[153] Fix | Delete
* Remove the 'jetpack/' or jetpack-' prefix from an extension name
[154] Fix | Delete
*
[155] Fix | Delete
* @param string $extension_name The extension name.
[156] Fix | Delete
*
[157] Fix | Delete
* @return string The unprefixed extension name.
[158] Fix | Delete
*/
[159] Fix | Delete
public static function remove_extension_prefix( $extension_name ) {
[160] Fix | Delete
if ( str_starts_with( $extension_name, 'jetpack/' ) || str_starts_with( $extension_name, 'jetpack-' ) ) {
[161] Fix | Delete
return substr( $extension_name, strlen( 'jetpack/' ) );
[162] Fix | Delete
}
[163] Fix | Delete
return $extension_name;
[164] Fix | Delete
}
[165] Fix | Delete
[166] Fix | Delete
/**
[167] Fix | Delete
* Whether two arrays share at least one item
[168] Fix | Delete
*
[169] Fix | Delete
* @param array $a An array.
[170] Fix | Delete
* @param array $b Another array.
[171] Fix | Delete
*
[172] Fix | Delete
* @return boolean True if $a and $b share at least one item
[173] Fix | Delete
*/
[174] Fix | Delete
protected static function share_items( $a, $b ) {
[175] Fix | Delete
return array_intersect( $a, $b ) !== array();
[176] Fix | Delete
}
[177] Fix | Delete
[178] Fix | Delete
/**
[179] Fix | Delete
* Set a (non-block) extension as available
[180] Fix | Delete
*
[181] Fix | Delete
* @param string $slug Slug of the extension.
[182] Fix | Delete
*/
[183] Fix | Delete
public static function set_extension_available( $slug ) {
[184] Fix | Delete
$slug = self::remove_extension_prefix( $slug );
[185] Fix | Delete
self::$availability[ $slug ] = true;
[186] Fix | Delete
}
[187] Fix | Delete
[188] Fix | Delete
/**
[189] Fix | Delete
* Set the reason why an extension (block or plugin) is unavailable
[190] Fix | Delete
*
[191] Fix | Delete
* @param string $slug Slug of the extension.
[192] Fix | Delete
* @param string $reason A string representation of why the extension is unavailable.
[193] Fix | Delete
* @param array $details A free-form array containing more information on why the extension is unavailable.
[194] Fix | Delete
*/
[195] Fix | Delete
public static function set_extension_unavailable( $slug, $reason, $details = array() ) {
[196] Fix | Delete
if (
[197] Fix | Delete
// Extensions that require a plan may be eligible for upgrades.
[198] Fix | Delete
'missing_plan' === $reason
[199] Fix | Delete
&& (
[200] Fix | Delete
/**
[201] Fix | Delete
* Filter 'jetpack_block_editor_enable_upgrade_nudge' with `true` to enable or `false`
[202] Fix | Delete
* to disable paid feature upgrade nudges in the block editor.
[203] Fix | Delete
*
[204] Fix | Delete
* When this is changed to default to `true`, you should also update `modules/memberships/class-jetpack-memberships.php`
[205] Fix | Delete
* See https://github.com/Automattic/jetpack/pull/13394#pullrequestreview-293063378
[206] Fix | Delete
*
[207] Fix | Delete
* @since 7.7.0
[208] Fix | Delete
*
[209] Fix | Delete
* @param boolean
[210] Fix | Delete
*/
[211] Fix | Delete
! apply_filters( 'jetpack_block_editor_enable_upgrade_nudge', false )
[212] Fix | Delete
/** This filter is documented in _inc/lib/admin-pages/class.jetpack-react-page.php */
[213] Fix | Delete
|| ! apply_filters( 'jetpack_show_promotions', true )
[214] Fix | Delete
)
[215] Fix | Delete
) {
[216] Fix | Delete
// The block editor may apply an upgrade nudge if `missing_plan` is the reason.
[217] Fix | Delete
// Add a descriptive suffix to disable behavior but provide informative reason.
[218] Fix | Delete
$reason .= '__nudge_disabled';
[219] Fix | Delete
}
[220] Fix | Delete
$slug = self::remove_extension_prefix( $slug );
[221] Fix | Delete
self::$availability[ $slug ] = array(
[222] Fix | Delete
'reason' => $reason,
[223] Fix | Delete
'details' => $details,
[224] Fix | Delete
);
[225] Fix | Delete
}
[226] Fix | Delete
[227] Fix | Delete
/**
[228] Fix | Delete
* Used to initialize the class, no longer in use.
[229] Fix | Delete
*
[230] Fix | Delete
* @return void
[231] Fix | Delete
* @deprecated 12.2 No longer needed.
[232] Fix | Delete
*/
[233] Fix | Delete
public static function init() {
[234] Fix | Delete
_deprecated_function( __METHOD__, '12.2' );
[235] Fix | Delete
}
[236] Fix | Delete
[237] Fix | Delete
/**
[238] Fix | Delete
* Resets the class to its original state
[239] Fix | Delete
*
[240] Fix | Delete
* Used in unit tests
[241] Fix | Delete
*
[242] Fix | Delete
* @return void
[243] Fix | Delete
*/
[244] Fix | Delete
public static function reset() {
[245] Fix | Delete
self::$extensions = null;
[246] Fix | Delete
self::$availability = array();
[247] Fix | Delete
self::$cached_availability = null;
[248] Fix | Delete
self::$block_js_loading_strategies = array();
[249] Fix | Delete
}
[250] Fix | Delete
[251] Fix | Delete
/**
[252] Fix | Delete
* Return the Gutenberg extensions (blocks and plugins) directory
[253] Fix | Delete
*
[254] Fix | Delete
* @return string The Gutenberg extensions directory
[255] Fix | Delete
*/
[256] Fix | Delete
public static function get_blocks_directory() {
[257] Fix | Delete
/**
[258] Fix | Delete
* Filter to select Gutenberg blocks directory
[259] Fix | Delete
*
[260] Fix | Delete
* @since 6.9.0
[261] Fix | Delete
*
[262] Fix | Delete
* @param string default: '_inc/blocks/'
[263] Fix | Delete
*/
[264] Fix | Delete
return apply_filters( 'jetpack_blocks_directory', '_inc/blocks/' );
[265] Fix | Delete
}
[266] Fix | Delete
[267] Fix | Delete
/**
[268] Fix | Delete
* Checks for a given .json file in the blocks folder.
[269] Fix | Delete
*
[270] Fix | Delete
* @deprecated 14.3
[271] Fix | Delete
*
[272] Fix | Delete
* @param string $preset The name of the .json file to look for.
[273] Fix | Delete
*
[274] Fix | Delete
* @return bool True if the file is found.
[275] Fix | Delete
*/
[276] Fix | Delete
public static function preset_exists( $preset ) {
[277] Fix | Delete
_deprecated_function( __METHOD__, '14.3' );
[278] Fix | Delete
return file_exists( JETPACK__PLUGIN_DIR . self::get_blocks_directory() . $preset . '.json' );
[279] Fix | Delete
}
[280] Fix | Delete
[281] Fix | Delete
/**
[282] Fix | Delete
* Decodes JSON loaded from the preset file in the blocks folder
[283] Fix | Delete
*
[284] Fix | Delete
* @since 14.3 Deprecated argument. Only one value is ever used.
[285] Fix | Delete
*
[286] Fix | Delete
* @param null $deprecated No longer used.
[287] Fix | Delete
*
[288] Fix | Delete
* @return mixed Returns an object if the file is present, or false if a valid .json file is not present.
[289] Fix | Delete
*/
[290] Fix | Delete
public static function get_preset( $deprecated = null ) {
[291] Fix | Delete
if ( $deprecated ) {
[292] Fix | Delete
_deprecated_argument( __METHOD__, '14.3', 'The $preset argument is no longer needed or used.' );
[293] Fix | Delete
}
[294] Fix | Delete
[295] Fix | Delete
if ( self::$preset_cache ) {
[296] Fix | Delete
return self::$preset_cache;
[297] Fix | Delete
}
[298] Fix | Delete
[299] Fix | Delete
self::$preset_cache = json_decode(
[300] Fix | Delete
// phpcs:ignore WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents
[301] Fix | Delete
file_get_contents( JETPACK__PLUGIN_DIR . self::get_blocks_directory() . 'index.json' )
[302] Fix | Delete
);
[303] Fix | Delete
return self::$preset_cache;
[304] Fix | Delete
}
[305] Fix | Delete
[306] Fix | Delete
/**
[307] Fix | Delete
* Returns a list of Jetpack Gutenberg extensions (blocks and plugins), based on index.json
[308] Fix | Delete
*
[309] Fix | Delete
* @return array A list of blocks: eg [ 'publicize', 'markdown' ]
[310] Fix | Delete
*/
[311] Fix | Delete
public static function get_jetpack_gutenberg_extensions_allowed_list() {
[312] Fix | Delete
$preset_extensions_manifest = ( defined( 'TESTING_IN_JETPACK' ) && TESTING_IN_JETPACK ) ? array() : self::get_preset();
[313] Fix | Delete
$blocks_variation = self::blocks_variation();
[314] Fix | Delete
[315] Fix | Delete
return self::get_extensions_preset_for_variation( $preset_extensions_manifest, $blocks_variation );
[316] Fix | Delete
}
[317] Fix | Delete
[318] Fix | Delete
/**
[319] Fix | Delete
* Returns a diff from a combined list of allowed extensions and extensions determined to be excluded
[320] Fix | Delete
*
[321] Fix | Delete
* @param array $allowed_extensions An array of allowed extensions.
[322] Fix | Delete
*
[323] Fix | Delete
* @return array A list of blocks: eg array( 'publicize', 'markdown' )
[324] Fix | Delete
*/
[325] Fix | Delete
public static function get_available_extensions( $allowed_extensions = null ) {
[326] Fix | Delete
$exclusions = get_option( 'jetpack_excluded_extensions', array() );
[327] Fix | Delete
$allowed_extensions = $allowed_extensions === null ? self::get_jetpack_gutenberg_extensions_allowed_list() : $allowed_extensions;
[328] Fix | Delete
[329] Fix | Delete
// Avoid errors if option data is not as expected.
[330] Fix | Delete
if ( ! is_array( $exclusions ) ) {
[331] Fix | Delete
$exclusions = array();
[332] Fix | Delete
}
[333] Fix | Delete
[334] Fix | Delete
return array_diff( $allowed_extensions, $exclusions );
[335] Fix | Delete
}
[336] Fix | Delete
[337] Fix | Delete
/**
[338] Fix | Delete
* Return true if the extension has been registered and there's nothing in the availablilty array.
[339] Fix | Delete
*
[340] Fix | Delete
* @param string $extension The name of the extension.
[341] Fix | Delete
*
[342] Fix | Delete
* @return bool whether the extension has been registered and there's nothing in the availablilty array.
[343] Fix | Delete
*/
[344] Fix | Delete
public static function is_registered_and_no_entry_in_availability( $extension ) {
[345] Fix | Delete
return self::is_registered( 'jetpack/' . $extension ) && ! isset( self::$availability[ $extension ] );
[346] Fix | Delete
}
[347] Fix | Delete
[348] Fix | Delete
/**
[349] Fix | Delete
* Return true if the extension has a true entry in the availablilty array.
[350] Fix | Delete
*
[351] Fix | Delete
* @param string $extension The name of the extension.
[352] Fix | Delete
*
[353] Fix | Delete
* @return bool whether the extension has a true entry in the availablilty array.
[354] Fix | Delete
*/
[355] Fix | Delete
public static function is_available( $extension ) {
[356] Fix | Delete
return isset( self::$availability[ $extension ] ) && true === self::$availability[ $extension ];
[357] Fix | Delete
}
[358] Fix | Delete
[359] Fix | Delete
/**
[360] Fix | Delete
* Get the availability of each block / plugin, or return the cached availability
[361] Fix | Delete
* if it has already been calculated. Avoids re-registering extensions when not
[362] Fix | Delete
* necessary.
[363] Fix | Delete
*
[364] Fix | Delete
* @return array A list of block and plugins and their availability status.
[365] Fix | Delete
*/
[366] Fix | Delete
public static function get_cached_availability() {
[367] Fix | Delete
if ( null === self::$cached_availability ) {
[368] Fix | Delete
self::$cached_availability = self::get_availability();
[369] Fix | Delete
}
[370] Fix | Delete
return self::$cached_availability;
[371] Fix | Delete
}
[372] Fix | Delete
[373] Fix | Delete
/**
[374] Fix | Delete
* Get availability of each block / plugin.
[375] Fix | Delete
*
[376] Fix | Delete
* @return array A list of block and plugins and their availablity status
[377] Fix | Delete
*/
[378] Fix | Delete
public static function get_availability() {
[379] Fix | Delete
/**
[380] Fix | Delete
* Fires before Gutenberg extensions availability is computed.
[381] Fix | Delete
*
[382] Fix | Delete
* In the function call you supply, use `Blocks::jetpack_register_block()` to set a block as available.
[383] Fix | Delete
* Alternatively, use `Jetpack_Gutenberg::set_extension_available()` (for a non-block plugin), and
[384] Fix | Delete
* `Jetpack_Gutenberg::set_extension_unavailable()` (if the block or plugin should not be registered
[385] Fix | Delete
* but marked as unavailable).
[386] Fix | Delete
*
[387] Fix | Delete
* @since 7.0.0
[388] Fix | Delete
*/
[389] Fix | Delete
do_action( 'jetpack_register_gutenberg_extensions' );
[390] Fix | Delete
[391] Fix | Delete
$available_extensions = array();
[392] Fix | Delete
[393] Fix | Delete
foreach ( static::get_extensions() as $extension ) {
[394] Fix | Delete
$is_available = self::is_registered_and_no_entry_in_availability( $extension ) || self::is_available( $extension );
[395] Fix | Delete
$available_extensions[ $extension ] = array(
[396] Fix | Delete
'available' => $is_available,
[397] Fix | Delete
);
[398] Fix | Delete
[399] Fix | Delete
if ( ! $is_available ) {
[400] Fix | Delete
$reason = isset( self::$availability[ $extension ] ) ? self::$availability[ $extension ]['reason'] : 'missing_module';
[401] Fix | Delete
$details = isset( self::$availability[ $extension ] ) ? self::$availability[ $extension ]['details'] : array();
[402] Fix | Delete
$available_extensions[ $extension ]['unavailable_reason'] = $reason;
[403] Fix | Delete
$available_extensions[ $extension ]['details'] = $details;
[404] Fix | Delete
}
[405] Fix | Delete
}
[406] Fix | Delete
[407] Fix | Delete
return $available_extensions;
[408] Fix | Delete
}
[409] Fix | Delete
[410] Fix | Delete
/**
[411] Fix | Delete
* Return the list of extensions that are available.
[412] Fix | Delete
*
[413] Fix | Delete
* @since 11.9
[414] Fix | Delete
*
[415] Fix | Delete
* @return array A list of block and plugins and their availability status.
[416] Fix | Delete
*/
[417] Fix | Delete
public static function get_extensions() {
[418] Fix | Delete
if ( ! static::should_load() ) {
[419] Fix | Delete
return array();
[420] Fix | Delete
}
[421] Fix | Delete
[422] Fix | Delete
if ( null === self::$extensions ) {
[423] Fix | Delete
/**
[424] Fix | Delete
* Filter the list of block editor extensions that are available through Jetpack.
[425] Fix | Delete
*
[426] Fix | Delete
* @since 7.0.0
[427] Fix | Delete
*
[428] Fix | Delete
* @param array
[429] Fix | Delete
*/
[430] Fix | Delete
self::$extensions = apply_filters( 'jetpack_set_available_extensions', self::get_available_extensions() );
[431] Fix | Delete
[432] Fix | Delete
if ( ! is_array( self::$extensions ) ) {
[433] Fix | Delete
_doing_it_wrong( __METHOD__, esc_html__( 'The jetpack_set_available_extensions filter must return an array.', 'jetpack' ), '14.9' );
[434] Fix | Delete
self::$extensions = array();
[435] Fix | Delete
}
[436] Fix | Delete
}
[437] Fix | Delete
[438] Fix | Delete
return self::$extensions;
[439] Fix | Delete
}
[440] Fix | Delete
[441] Fix | Delete
/**
[442] Fix | Delete
* Check if an extension/block is already registered
[443] Fix | Delete
*
[444] Fix | Delete
* @since 7.2
[445] Fix | Delete
*
[446] Fix | Delete
* @param string $slug Name of extension/block to check.
[447] Fix | Delete
*
[448] Fix | Delete
* @return bool
[449] Fix | Delete
*/
[450] Fix | Delete
public static function is_registered( $slug ) {
[451] Fix | Delete
return WP_Block_Type_Registry::get_instance()->is_registered( $slug );
[452] Fix | Delete
}
[453] Fix | Delete
[454] Fix | Delete
/**
[455] Fix | Delete
* Check if Gutenberg editor is available
[456] Fix | Delete
*
[457] Fix | Delete
* @since 6.7.0
[458] Fix | Delete
*
[459] Fix | Delete
* @return bool
[460] Fix | Delete
*/
[461] Fix | Delete
public static function is_gutenberg_available() {
[462] Fix | Delete
return true;
[463] Fix | Delete
}
[464] Fix | Delete
[465] Fix | Delete
/**
[466] Fix | Delete
* Check whether conditions indicate Gutenberg Extensions (blocks and plugins) should be loaded
[467] Fix | Delete
*
[468] Fix | Delete
* Loading blocks and plugins is enabled by default and may be disabled via filter:
[469] Fix | Delete
* add_filter( 'jetpack_gutenberg', '__return_false' );
[470] Fix | Delete
*
[471] Fix | Delete
* @since 6.9.0
[472] Fix | Delete
*
[473] Fix | Delete
* @return bool
[474] Fix | Delete
*/
[475] Fix | Delete
public static function should_load() {
[476] Fix | Delete
if ( ! Jetpack::is_connection_ready() && ! ( new Status() )->is_offline_mode() ) {
[477] Fix | Delete
return false;
[478] Fix | Delete
}
[479] Fix | Delete
[480] Fix | Delete
$return = true;
[481] Fix | Delete
[482] Fix | Delete
if ( ! ( new Modules() )->is_active( 'blocks' ) ) {
[483] Fix | Delete
$return = false;
[484] Fix | Delete
}
[485] Fix | Delete
[486] Fix | Delete
/**
[487] Fix | Delete
* Filter to enable Gutenberg blocks.
[488] Fix | Delete
*
[489] Fix | Delete
* Defaults to true if (connected or in offline mode) and the Blocks module is active.
[490] Fix | Delete
*
[491] Fix | Delete
* @since 6.5.0
[492] Fix | Delete
* @since 13.9 Filter is able to activate or deactivate Gutenberg blocks.
[493] Fix | Delete
*
[494] Fix | Delete
* @param bool true Whether to load Gutenberg blocks
[495] Fix | Delete
*/
[496] Fix | Delete
return (bool) apply_filters( 'jetpack_gutenberg', $return );
[497] Fix | Delete
}
[498] Fix | Delete
[499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function