我找到了一篇关于此过滤器的文章,但我应该将一组允许的块传递给它。这就是我目前得到的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块仍在继续工作,所以我想这个过滤器可以满足我的需要,我只需要一个包含所有块的数组。
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;
}