_block_bindings_post_data_get_value( array $source_args, WP_Block $block_instance ): mixed

In this article

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only by core. It is listed here for completeness.

Gets value for Post Data source.

Parameters

$source_argsarrayrequired
Array containing arguments used to look up the source value.
Example: array( "field" => "foo" ).
$block_instanceWP_Blockrequired
The block instance.

Return

mixed The value computed for the source.

Source

function _block_bindings_post_data_get_value( array $source_args, $block_instance ) {
	if ( empty( $source_args['field'] ) ) {
		// Backward compatibility for when the source argument was called `key` in Gutenberg plugin.
		if ( empty( $source_args['key'] ) ) {
			return null;
		}
		$field = $source_args['key'];
	} else {
		$field = $source_args['field'];
	}

	/*
	 * BACKWARDS COMPATIBILITY: Hardcoded exception for navigation blocks.
	 * Required for WordPress 6.9+ navigation blocks. DO NOT REMOVE.
	 */
	$block_name          = $block_instance->name ?? '';
	$is_navigation_block = in_array(
		$block_name,
		array( 'core/navigation-link', 'core/navigation-submenu' ),
		true
	);

	if ( $is_navigation_block ) {
		// Navigation blocks: read from block attributes.
		$post_id = $block_instance->attributes['id'] ?? null;
	} else {
		// All other blocks: use context.
		$post_id = $block_instance->context['postId'] ?? null;
	}

	// If we don't have an entity ID, bail early.
	if ( empty( $post_id ) ) {
		return null;
	}

	// If a post isn't public, we need to prevent unauthorized users from accessing the post data.
	$post = get_post( $post_id );
	if ( ( ! is_post_publicly_viewable( $post ) && ! current_user_can( 'read_post', $post_id ) ) || post_password_required( $post ) ) {
		return null;
	}

	if ( 'date' === $field ) {
		return esc_attr( get_the_date( 'c', $post_id ) );
	}

	if ( 'modified' === $field ) {
		// Only return the modified date if it is later than the publishing date.
		if ( get_the_modified_date( 'U', $post_id ) > get_the_date( 'U', $post_id ) ) {
			return esc_attr( get_the_modified_date( 'c', $post_id ) );
		} else {
			return '';
		}
	}

	if ( 'link' === $field ) {
		$permalink = get_permalink( $post_id );
		return false === $permalink ? null : esc_url( $permalink );
	}
}

Changelog

VersionDescription
6.9.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.