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