如何覆盖Wordpress的核心块保存功能?

问题描述

我想要做的就是覆盖核心块的保存功能,以使用不同的 html 呈现前端。当我使用 wordpress 5.3 时,我能够使用 PHP 覆盖并使其成为动态块(我更喜欢):

register_block_type( 'core/file',array(
'render_callback' => 'custom_core_block_render_cb',));

但现在我已经更新到 wordpress 5.6,有一条 wordpress 通知“WP_Block_Type_Registry::register 被错误调用。块类型“核心/文件”已经注册。”

这个通知是否重要到我不能忽视它?如果不是,那么有没有办法绕过它,而无需使用 blocks.registerBlockType 覆盖 javascript 端的 save() 因为它所做的一切都会带来未来的问题并在将来打破块(如果我需要的话)更新(这真的让我感到不安)。也宁愿不复制整个块。

解决方法

您不应该尝试重新注册核心块。 WP 核心块有一个过滤器来改变输出:render_block

这是过滤器: apply_filters( 'render_block',string $block_content,array $block )

用法如下:

// Two arguments
add_filter( 'render_block','so66910341_core_file_output',10,2 );

function so66910341_core_file_output( string $block_content,array $block ) {
    if ( $block['blockName'] === 'core/file' ) :
         // update the $block_content here
         $updated_content_markup = '<html stuff>';
         $updated_content_markup .= $block_content;
         $updated_content_markup .= '</closing html stuff>';
         
         return $updated_content_markup; // or whatever variable you use.
    endif;

    // Return the original block content if it's not a core/file block.
    return $block_content;
}

文档如下: https://developer.wordpress.org/reference/hooks/render_block/