将 Bootstrap 按钮样式添加到 WordPress 中的默认古腾堡按钮块

问题描述 投票:0回答:4

我想将 Bootstrap 框架中的默认按钮样式与 Gutenberg 的默认按钮块一起使用。

我找到了一个解决方案,可以从 WordPress 中删除默认样式并添加一些自己的样式。这是链接:https://www.billerickson.net/block-styles-in-gutenberg/

我正在使用 Bill Erickson 的代码删除默认样式并添加新样式。就我而言,来自 Bootstrap 的

.btn-primary
样式:

wp.domReady( () => {
    wp.blocks.unregisterBlockStyle( 'core/button', 'default' );
    wp.blocks.unregisterBlockStyle( 'core/button', 'outline' );
    wp.blocks.unregisterBlockStyle( 'core/button', 'squared' );

    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'btn',
        label: 'Default',
        isDefault: true,
    });

    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'btn-primary',
        label: 'Primary',
    } );

} );

这里有两个问题:

  1. WordPress 以错误的方式添加类
  2. 它只添加了一个类,但 Bootstrap 至少需要两个

这是添加类后的按钮代码:

<div class="wp-block-button aligncenter is-style-btn-primary">
    <a class="wp-block-button__link" href="#">Button</a>
</div>

如您所见,WordPress 在按钮周围的 div 添加了新的类 2。 它为班级添加了

is-style-

使用 Bootstrap 样式的按钮块。我需要这样的代码:

<div class="wp-block-button aligncenter is-style-btn-primary">
    <a class="btn btn-primary" href="#">Button</a>
</div>

该类必须位于

<a>
标签内,我还需要第二个类
.btn

有什么办法可以将这两个类添加到

<a>
标签中吗?

wordpress reactjs twitter-bootstrap wordpress-gutenberg gutenberg-blocks
4个回答
4
投票

解决此问题的另一种方法是使用 SCSS @extend

首先注册将显示在按钮块编辑器中的块样式:

    wp.domReady ( function() {

    wp.blocks.unregisterBlockStyle( 'core/button', 'outline');
    wp.blocks.unregisterBlockStyle( 'core/button', 'fill');
    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'bootstrap-default',
        label: 'Bootstrap Default',
        isDefault: true
    });
    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'bootstrap-primary',
        label: 'Bootstrap Primary',
    });
    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'bootstrap-success',
        label: 'Bootstrap Success',
    });
    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'bootstrap-default-lg',
        label: 'Bootstrap Default Large',
    });
    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'bootstrap-primary-lg',
        label: 'Bootstrap Primary Large',
    });
    wp.blocks.registerBlockStyle( 'core/button', {
        name: 'bootstrap-success-lg',
        label: 'Bootstrap Success Large',
    }); 

});

然后我创建了一个 _wordpress.scss,它包含并编译了每个块样式的规则以及它们扩展的 Bootstrap 规则:

.is-style-bootstrap-default > a {
    @extend .btn;
    @extend .btn-default;
}

.is-style-bootstrap-primary > a {
    @extend .btn;
    @extend .btn-primary;
}

.is-style-bootstrap-success > a {
    @extend .btn;
    @extend .btn-success;
}

.is-style-bootstrap-default-lg > a {
    @extend .btn;
    @extend .btn-default;
    @extend .btn-lg;
}

.is-style-bootstrap-primary-lg > a {
    @extend .btn;
    @extend .btn-primary;
    @extend .btn-lg;
}

.is-style-bootstrap-success-lg > a {
    @extend .btn;
    @extend .btn-success;
    @extend .btn-lg;
}

2
投票

我认为您会发现编写自己的按钮比覆盖现有组件更简单。如果您确实想覆盖核心按钮块,您可能需要应用适当的块过滤器

如果您正在寻找立即解决方案,高级引导块插件中的按钮组件源可能会帮助您入门,或者您可以通过插件目录进行安装。

(全面披露:我是这个插件的作者。)


0
投票

您可以安装此插件: https://wordpress.org/plugins/wp-bootstrap-blocks/

或者阅读插件代码并创建自己的块,然后您还可以为按钮创建自己的自定义样式。


0
投票

您可以使用

render_block
过滤器来自定义块内容:

function my_theme_render_block( $block_content, $block ) {
    if ( $block['blockName'] === 'core/button' ) {
        return str_replace( 'wp-block-button__link', 'btn btn-primary', $block_content );
    }

    return $block_content;
}

add_filter( 'render_block', 'my_theme_render_block', 10, 2 );

更多信息:https://developer.wordpress.org/reference/hooks/render_block/

© www.soinside.com 2019 - 2024. All rights reserved.