如何将旧版小部件转换为块

时间:2021-06-16 作者:leemon

WP 5.8(尚未发布)将支持将遗留小部件转换为块。我有一个定制的遗留小部件,我正在尝试添加对将其转换为块的支持。在阅读文档时,我将以下代码添加到我的一个块中。我的遗留小部件有两个属性(attribute1attribute2):

JAVASCRIPT:

transforms: {
    from: [
        {
            type: \'block\',
            blocks: [ \'my/custom-block\' ],
            isMatch: ( { idBase, instance } ) => {
                if ( ! instance?.raw ) {
                    // Can\'t transform if raw instance is not shown in REST API.
                    return false;
                }
                return idBase === \'my-custom-widget\';
            },
            transform: ( { instance } ) => {
                const transformedBlock = createBlock(
                    \'my/custom-block\',
                    {
                        attribute1: instance.raw.attribute1,
                        attribute2: instance.raw.attribute2,
                    }
                );
                if ( ! instance.raw?.title ) {
                    return transformedBlock;
                }
                return [
                    createBlock( \'core/heading\', {
                        content: instance.raw.title,
                    } ),
                    transformedBlock,
                ];
            },
        },
    ]
},

PHP:

这是__construct() 功能在我的旧小部件中。我添加了show_instance_in_rest arg,以便可以在REST API中看到小部件:

function __construct() {
    $widget_ops = array(
        \'classname\'             => \'my-custom-widget\',
        \'show_instance_in_rest\' => true
    );
    parent::__construct( \'my-custom-widget\', \'My Custom Widget\', $widget_ops );
}
但是,当我在WP 5.8 beta2的新窗口小部件编辑器中单击转换按钮时,没有将其转换为自定义块的选项,只有列和组块。

有什么想法吗?

1 个回复
最合适的回答,由SO网友:leemon 整理而成

如果有人感兴趣,我会回答我的问题:

这个blocks 转换代码中的参数应为[ \'core/legacy-widget\' ] 而不是[ \'my/custom-block\' ]. 对于from transform它指示要从中转换的块,在本例中,它是一个遗留小部件。