【问题标题】:How to override Wordpress's core block save function?如何覆盖 Wordpress 核心块保存功能?
【发布时间】:2021-04-01 19:16:51
【问题描述】:

我想要做的就是覆盖核心块的保存功能,以使用不同的 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(),因为它所做的一切都会带来未来的问题,如果我需要进行更新,它会在未来打破障碍(这真的让我很生气)。也宁愿不复制整个块。

【问题讨论】:

标签: wordpress wordpress-gutenberg


【解决方案1】:

您不应该尝试重新注册核心块。 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/

【讨论】:

    【解决方案2】:

    Wordpress 5.5 的更好解决方案 - 仅更改 render_callback

    add_filter( 'register_block_type_args', 'custom_register_block_type_args', 10, 3 );
    function custom_register_block_type_args( $args, $name ) {
        if( $name == 'core/file' ) {
            $args['render_callback'] = 'custom_core_block_render_cb';
        }
        return $args;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多