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 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;
}