acf_handle_json_block_registration() │ ACF 6.0.0

Handle an ACF block registered through block.json

Хуки из функции

Возвращает

array. Block registration settings with ACF required additions.

Использование

acf_handle_json_block_registration( $settings, $metadata );
$settings(массив) (обязательный)
The compiled block settings.
$metadata(массив) (обязательный)
The raw json metadata.

Список изменений

С версии 6.0.0 Введена.

Код acf_handle_json_block_registration() ACF 6.8.8

function acf_handle_json_block_registration( $settings, $metadata ) {
	if ( ! acf_is_acf_block_json( $metadata ) ) {
		return $settings;
	}

	/**
	 * Filters the default ACF block version for blocks registered via block.json.
	 *
	 * @since 6.6.0
	 *
	 * @param integer $default_acf_block_version The default ACF block version.
	 * @param array   $settings                  An array of block settings.
	 * @return integer
	 */
	$default_acf_block_version = apply_filters( 'acf/blocks/default_block_version', 2, $settings );

	// Setup ACF defaults.
	$settings = wp_parse_args(
		$settings,
		array(
			'render_template'   => false,
			'render_callback'   => false,
			'enqueue_style'     => false,
			'enqueue_script'    => false,
			'enqueue_assets'    => false,
			'post_types'        => array(),
			'uses_context'      => array(),
			'supports'          => array(),
			'attributes'        => array(),
			'acf_block_version' => $default_acf_block_version,
			'validate'          => true,
			'validate_on_load'  => true,
			'use_post_meta'     => false,
		)
	);

	// Add user provided attributes to ACF's required defaults.
	$settings['attributes'] = wp_parse_args(
		acf_get_block_type_default_attributes( $metadata ),
		$settings['attributes']
	);

	// Add default ACF 'supports' settings.
	$settings['supports'] = wp_parse_args(
		$settings['supports'],
		array(
			'align'    => true,
			'html'     => false,
			'mode'     => true,
			'jsx'      => true,
			'multiple' => true,
		)
	);

	// Add default ACF 'uses_context' settings.
	$settings['uses_context'] = array_values(
		array_unique(
			array_merge(
				$settings['uses_context'],
				array(
					'postId',
					'postType',
				)
			)
		)
	);

	// Map custom ACF properties from the ACF key, with localization.
	$property_mappings = array(
		'renderCallback'           => 'render_callback',
		'renderTemplate'           => 'render_template',
		'mode'                     => 'mode',
		'blockVersion'             => 'acf_block_version',
		'postTypes'                => 'post_types',
		'validate'                 => 'validate',
		'validateOnLoad'           => 'validate_on_load',
		'usePostMeta'              => 'use_post_meta',
		'hideFieldsInSidebar'      => 'hide_fields_in_sidebar',
		'expandedEditorButtons'    => 'expanded_editor_buttons',
		'autoInlineEditing'        => 'auto_inline_editing',
		'expandedEditorButtonText' => 'expanded_editor_button_text',
	);
	$textdomain        = ! empty( $metadata['textdomain'] ) ? $metadata['textdomain'] : 'acf';
	$i18n_schema       = get_block_metadata_i18n_schema();

	foreach ( $property_mappings as $key => $mapped_key ) {
		if ( isset( $metadata['acf'][ $key ] ) ) {
			unset( $settings[ $key ] );
			$settings[ $mapped_key ] = $metadata['acf'][ $key ];
			if ( $textdomain && isset( $i18n_schema->$key ) ) {
				$settings[ $mapped_key ] = translate_settings_using_i18n_schema( $i18n_schema->$key, $settings[ $key ], $textdomain );
			}
		}
	}

	if ( isset( $metadata['apiVersion'] ) ) {
		// Use the apiVersion defined in block.json if it exists.
		$settings['api_version'] = $metadata['apiVersion'];
	} elseif ( $settings['acf_block_version'] >= 3 && version_compare( get_bloginfo( 'version' ), '6.3', '>=' ) ) {
		// Otherwise, if we're on WP 6.3+ and the block is ACF block version 3 or greater, use apiVersion 3.
		$settings['api_version'] = 3;
	} else {
		// Otherwise, default to apiVersion 2.
		$settings['api_version'] = 2;
	}

	// Add the block name and registration path to settings.
	$settings['name'] = $metadata['name'];
	$settings['path'] = dirname( $metadata['file'] );

	// Prevent blocks that usePostMeta from being nested or saving multiple.
	if ( ! empty( $settings['use_post_meta'] ) ) {
		$settings['parent']               = array( 'core/post-content' );
		$settings['supports']['multiple'] = false;
	}

	// If expanded_editor_buttons was not passed in, make it default to true.
	if ( ! isset( $settings['expanded_editor_buttons'] ) ) {
		$settings['expanded_editor_buttons'] = true;
	}

	// Handle fields defined in block.json
	if ( isset( $metadata['acf']['fields'] ) && is_array( $metadata['acf']['fields'] ) ) {
		$block_title          = isset( $metadata['title'] ) ? $metadata['title'] : $metadata['name'];
		$override_group_title = isset( $metadata['acf']['fieldGroupTitle'] ) ? (string) $metadata['acf']['fieldGroupTitle'] : '';
		acf_register_block_field_group_from_fields( $metadata['name'], $block_title, $metadata['acf']['fields'], $override_group_title );
	}

	acf_get_store( 'block-types' )->set( $metadata['name'], $settings );
	add_action( 'enqueue_block_editor_assets', 'acf_enqueue_block_assets' );

	// Ensure our render callback is used.
	$settings['render_callback'] = 'acf_render_block_callback';

	return $settings;
}