如何隐藏特定Gutenberg块的用户界面?

时间:2019-08-22 作者:NextGenThemes

我找到了一篇关于此过滤器的文章,但我应该将一组允许的块传递给它。这就是我目前得到的ddd 是Kint调试器的调试函数,它显示$allowed_blocks 包含布尔true 值,而不是我期望的所有块的数组。那么从哪里可以得到所有块的数组呢?多么可怕的WP API。

add_filter( \'allowed_block_types\', __NAMESPACE__ .  \'\\remove_core_video_blocks\' );

function remove_core_video_blocks( $allowed_blocks ) {

    #ddd($allowed_blocks);

    $allowed_blocks = array_diff( $allowed_blocks, [ \'core-embed/youtube\' ] );

    return $allowed_blocks;
}
我试过了

return array(
    \'core/image\',
    \'core/paragraph\',
    \'core/heading\',
    \'core/list\'
);
这禁用了块UI,但我在帖子中已经拥有的YouTube块仍在继续工作,所以我想这个过滤器可以满足我的需要,我只需要一个包含所有块的数组。

1 个回复
SO网友:NextGenThemes

找到JavaScript解决方案。如果我没记错的话,有人谈到了临时解决办法this or related Github issues 所以请记住这一点。但我想这意味着只有服务器端,所以对于只有UI隐藏,我想这会很好。

const wp = window.wp; // when using webpack

wp.data.dispatch( \'core/edit-post\' ).hideBlockTypes( [
    \'core-embed/youtube\',
    \'core-embed/vimeo\',
    \'core-embed/dailymotion\',
    \'core-embed/collegehumor\',
    \'core-embed/ted\',
] );
还发现了一些错误的PHP代码,我已修复,但仍然not working correctly 因为数组不包含所有块。

add_filter( \'allowed_block_types\', __NAMESPACE__ .  \'\\remove_core_video_blocks\' );

function remove_core_video_blocks( $allowed_blocks ) {

    $guten_blocks = \\WP_Block_Type_Registry::get_instance()->get_all_registered();

    foreach ( $guten_blocks as $key => $value) {
        $registered_blocks[] = $key;
    }

    $allowed_blocks = array_diff(
        $registered_blocks, // NOTE registered blocks does NOT contains all blocks
        array( \'wp-embed/youtube\' )
    );

    return $allowed_blocks;
}

相关推荐