微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何覆盖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/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。