Skip to content

Commit

Permalink
Latest Posts: Shim server-side deprecation for string-based categories
Browse files Browse the repository at this point in the history
* Reverts the change to `render_block_core_latest_posts`
  • Loading branch information
mcsf committed Apr 15, 2020
1 parent f9127df commit 9aa653e
Showing 1 changed file with 32 additions and 5 deletions.
37 changes: 32 additions & 5 deletions packages/block-library/src/latest-posts/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,11 +47,7 @@ function render_block_core_latest_posts( $attributes ) {
add_filter( 'excerpt_length', 'block_core_latest_posts_get_excerpt_length', 20 );

if ( isset( $attributes['categories'] ) ) {
if ( is_array( $attributes['categories'] ) ) {
$args['category__in'] = array_column( $attributes['categories'], 'id' );
} else {
$args['category__in'] = (array) $attributes['categories'];
}
$args['category__in'] = array_column( $attributes['categories'], 'id' );
}

$recent_posts = get_posts( $args );
Expand Down Expand Up @@ -177,3 +173,34 @@ function register_block_core_latest_posts() {
);
}
add_action( 'init', 'register_block_core_latest_posts' );

/**
* Handles outdated versions of the `core/latest-posts` block by converting
* attribute `categories` from a numeric string to an array with key `id`.
*
* This is done to accommodate the changes introduced in #20781 that sought to
* add support for multiple categories to the block. However, given that this
* block is dynamic, the usual provisions for block migration are insufficient,
* as they only act when a block is loaded in the editor.
*
* TODO: Remove when and if the bottom client-side deprecation for this block
* is removed.
*
* @param array $block A single parsed block object.
*
* @return array The migrated block object.
*/
function block_core_latest_posts_migrate_categories( $block ) {
if (
'core/latest-posts' === $block['blockName'] &&
isset( $block['attrs']['categories'] ) &&
is_string( $block['attrs']['categories'] )
) {
$block['attrs']['categories'] = array(
array( 'id' => absint( $block['attrs']['categories'] ) ),
);
}

return $block;
}
add_filter( 'render_block_data', 'block_core_latest_posts_migrate_categories' );

0 comments on commit 9aa653e

Please sign in to comment.