访问/过滤块在Gutenberg中的变化,在WordPress 5.6中

时间:2021-01-26 作者:1NN

我正在中使用代码段functions.php 修改所有youtube嵌入,以添加额外的播放器参数。在WordPress 5.6之前,youtube块可以通过if( "core-embed/youtube" === $block[\'blockName\']) { // do something }

但是,从WP 5.6开始,块名称现在是core/embedyoutube是一种变体。

我试过了if( "core/embed/youtube" === $block[\'blockName\']) 以及if($block[\'blockName\'] == \'core/embed/youtube\'), 但这行不通。

我的完整原始代码(adapted from this article) 是:

function wpftw_modest_youtube_player( $block_content, $block ) {
    if( "core-embed/youtube" === $block[\'blockName\'] ) {
        $block_content = str_replace( \'?feature=oembed\', \'?feature=oembed&modestbranding=1&showinfo=0&rel=0&cc_load_policy=1\', $block_content );
    }
    return $block_content;
}
add_filter( \'render_block\', \'wpftw_modest_youtube_player\', 10, 3);
我对Wordpress和php相对较新,所以希望您能理解清楚。我试着用谷歌搜索一个答案,并查阅了区块编辑器手册,但没有找到答案。

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

整个街区变奏曲完全是一场骗局,一场白费力气的追逐!

但是,在我分享实际解决方案之前,让我们先从中得出结论,这比你想象的要简单得多。

你不会看变化本身,变化设置了不同的属性,你应该寻找的是属性,而不是变化。

例如,以下是在中定义的twitter变体packages/block-library/src/embed/variations.js:

    {
        name: \'twitter\',
        title: \'Twitter\',
        icon: embedTwitterIcon,
        keywords: [ \'tweet\', __( \'social\' ) ],
        description: __( \'Embed a tweet.\' ),
        patterns: [ /^https?:\\/\\/(www\\.)?twitter\\.com\\/.+/i ],
        attributes: { providerNameSlug: \'twitter\', responsive: true },
    },
与其查看块变化,不如检查providerNameSlug 属性。

但这完全是找错了方向,你根本不会这么做,事实上,你的问题与块和编辑器完全无关!

If you want to modify OEmbed URLs, don\'t modify the blocks that render OEmbeds, modify the OEmbed! WordPress在引入块编辑器之前很久就已经有了这种过滤器。

谢天谢地,2011年有人问如何做到这一点,答案应该仍然有效:

https://wordpress.stackexchange.com/a/14438/736