Bootstrap Gutenberg Blocks for WordPress. This plugin adds Bootstrap components and layout options as Gutenberg blocks.
column
blocks.column
blocks.column
blocks.row
block.This plugin supports Bootstrap v4 and v5.
The version can be selected in the plugin settings (Settings > Bootstrap Blocks) or by defining the WP_BOOTSTRAP_BLOCKS_BOOTSTRAP_VERSION
constant in the wp-config.php
file:
define( 'WP_BOOTSTRAP_BLOCKS_BOOTSTRAP_VERSION', '4' );
define( 'WP_BOOTSTRAP_BLOCKS_BOOTSTRAP_VERSION', '5' );
Possible values right now are '4'
or '5'
. By default Bootstrap version 5 is selected.
The CSS grid (supported with Bootstrap >= 5.1.0) can be enabled in the plugin settings (Settings > Bootstrap Blocks) or by defining the WP_BOOTSTRAP_BLOCKS_ENABLE_CSS_GRID
constant in the wp-config.php
file:
eg. define( 'WP_BOOTSTRAP_BLOCKS_ENABLE_CSS_GRID', true );
When the CSS grid is enabled the row
and the column
blocks will use custom templates for the rendering process:
row-css.grid.php
column-css-grid.php
The support is still experimental since it's also marked as experimental in the Bootstarp library. Please read the official Bootstrap documentation to get more information on how to use it.
Please be aware that this plugin does not include the Bootstrap library in your website. You need to do this by yourself. We decided not to include the library so that you can modify Bootstrap to your own needs before loading it.
The easiest way to do this is to add the following to your theme's functions.php
:
function mytheme_load_bootstrap() {
if ( is_admin() ) {
return;
}
wp_enqueue_style( 'bootstrap', 'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css', array(), '4.3.1' );
wp_deregister_script( 'jquery' ); // Remove WP jQuery version
wp_enqueue_script( 'jquery', 'https://code.jquery.com/jquery-3.3.1.slim.min.js', array(), '3.3.1', true );
wp_enqueue_script( 'popper.js', 'https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js', array(), '1.14.7', true );
wp_enqueue_script( 'bootstrap', 'https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js', array(), '4.3.1', true );
}
add_action( 'wp_enqueue_scripts', 'mytheme_load_bootstrap' );
All blocks are implemented as dynamic blocks. This makes it possible to overwrite the template of a block in your theme.
To overwrite a block template create a folder called wp-bootstrap-blocks/
in your theme directory.
You can copy the original template from wp-bootstrap-blocks/src/templates/<blockname>.php
as a starting point and adjust it to your needs.
The plugin provides the following PHP filters. Please visit the following page to get more information about PHP filters: https://developer.wordpress.org/reference/functions/add_filter/.
Changes the default theme directory name (wp-bootstrap-blocks/
).
add_filter( 'wp_bootstrap_blocks_template_path', 'my_template_path', 10, 1 );
function my_template_path( $template_path ) {
return 'block-templates/';
}
$template_path
(string
) Template directory name in theme. (Default: 'wp-bootstrap-blocks/'
)Possibility to overwrite the located template path before it gets loaded.
$located
(string
) located file path.$template_name
(string
) template name which was requested.$template_path
(string
) path to template directory.$default_path
(string
) default template directory path.add_filter( 'wp_bootstrap_blocks_get_template', 'my_located_template', 10, 4 );
function my_located_template( $located, $template_name, $template_path, $default_path ) {
return 'mytheme/special-templates/block.php';
}
Possibility to overwrite the located template path.
$template
(string
) located file path.$template_name
(string
) template name which was requested.$template_path
(string
) path to template directory.add_filter( 'wp_bootstrap_blocks_locate_template', 'my_template_locater', 10, 3 );
function my_template_locater( $template, $template_name, $template_path ) {
return 'mytheme/special-templates/block.php';
}
Change classes of row block.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_row_classes', 'my_custom_row_classes', 10, 2 );
function my_custom_row_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of row block when CSS grid is enabled.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_row_css_grid_classes', 'my_custom_row_css_grid_classes', 10, 2 );
function my_custom_row_css_grid_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change inline styles of row block when CSS grid is enabled.
$styles
(string
) Inline styles which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_row_css_grid_styles', 'my_custom_row_css_grid_styles', 10, 2 );
function my_custom_row_css_grid_styles( $styles, $attributes ) {
return '--bs-gap: 3rem;';
}
Change classes of column block.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_column_classes', 'my_custom_column_classes', 10, 2 );
function my_custom_column_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of column block when CSS grid is enabled.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_column_css_grid_classes', 'my_custom_column_css_grid_classes', 10, 2 );
function my_custom_column_css_grid_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of the inner content of the column block.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_column_content_classes', 'my_custom_column_content_classes', 10, 2 );
function my_custom_column_content_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of the inner content of the column block when CSS grid is enabled.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_column_css_grid_content_classes', 'my_custom_column_css_grid_content_classes', 10, 2 );
function my_custom_column_css_grid_content_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of container block.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_container_classes', 'my_custom_container_classes', 10, 2 );
function my_custom_container_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of button block.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_button_classes', 'my_custom_button_classes', 10, 2 );
function my_custom_button_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Change classes of button block wrapper.
$classes
(array
) Classes which are added to the block template.$attributes
(array
) Attributes of the block.add_filter( 'wp_bootstrap_blocks_button_wrapper_classes', 'my_custom_button_wrapper_classes', 10, 2 );
function my_custom_button_wrapper_classes( $classes, $attributes ) {
return [ 'my', 'custom', 'classes' ];
}
Modify default attributes of the row block.
$default_attributes
(array
) Default attributes of row block.
template
(string
) Name of default template of row block (Default: '1-1'
)noGutters
(boolean
) Defines if noGutters option should be selected or not (Default: false
)alignment
('left'
| 'center'
| 'right'
) Default horizontal alignment of inner columns (Default: ''
)verticalAlignment
('top'
| 'center'
| 'bottom'
) Default vertical alignment of inner columns (Default: ''
)editorStackColumns
(boolean
) Defines if editorStackColumns option should be selected by default or not (Default: false
)horizontalGutters
(string
) Default horizontal gutters size (Default: ''
)verticalGutters
(string
) Default vertical gutters size (Default: ''
)cssGridGutters
(string
) Default gutters size when CSS grid is enabled (Default: ''
)add_filter( 'wp_bootstrap_blocks_row_default_attributes', 'my_row_default_attributes', 10, 1 );
function my_row_default_attributes( $default_attributes ) {
$default_attributes['template'] = '1-2';
$default_attributes['noGutters'] = true;
$default_attributes['alignment'] = 'right';
$default_attributes['verticalAlignment'] = 'bottom';
$default_attributes['editorStackColumns'] = true;
$default_attributes['horizontalGutters'] = 'gx-5';
$default_attributes['verticalGutters'] = 'gy-3';
return $default_attributes;
}
Modify default attributes of the column block.
$default_attributes
(array
) Default attributes of column block.
sizeXxl
(int
) Default xxl column size (Default: 0
)sizeXl
(int
) Default xl column size (Default: 0
)sizeLg
(int
) Default lg column size (Default: 0
)sizeMd
(int
) Default md column size (Default: 0
)sizeSm
(int
) Default sm column size (Default: 0
)sizeXs
(int
) Default xs column size (Default: 12
))equalWidthXxl
(boolean
) Defines if equal-width xxl option should be selected or not (Default: false
)equalWidthXl
(boolean
) Defines if equal-width xl option should be selected or not (Default: false
)equalWidthLg
(boolean
) Defines if equal-width lg option should be selected or not (Default: false
)equalWidthMd
(boolean
) Defines if equal-width md option should be selected or not (Default: false
)equalWidthSm
(boolean
) Defines if equal-width sm option should be selected or not (Default: false
)equalWidthXs
(boolean
) Defines if equal-width xs option should be selected or not (Default: false
)bgColor
(string
) Background color of column (Default: ''
)contentVerticalAlignment
('top'
| 'center'
| 'bottom'
) Default vertical alignment of content (Default: ''
)padding
(string
) Padding inside column (Default: ''
)add_filter( 'wp_bootstrap_blocks_column_default_attributes', 'my_column_default_attributes', 10, 1 );
function my_column_default_attributes( $default_attributes ) {
$default_attributes['sizeLg'] = 4;
$default_attributes['sizeMd'] = 6;
$default_attributes['equalWidthXl'] = true;
$default_attributes['bgColor'] = 'primary';
$default_attributes['padding'] = 'p-3';
$default_attributes['contentVerticalAlignment'] = 'bottom';
return $default_attributes;
}
Modify default attributes of the container block.
$default_attributes
(array
) Default attributes of container block.
isFluid
(boolean
) Defines if container should be fluid or not (Default: false
)marginAfter
(string
) Default margin after container block (Default: 'mb-2'
)add_filter( 'wp_bootstrap_blocks_container_default_attributes', 'my_container_default_attributes', 10, 1 );
function my_container_default_attributes( $default_attributes ) {
$default_attributes['isFluid'] = true;
$default_attributes['fluidBreakpoint'] = 'md';
$default_attributes['marginAfter'] = 'mb-3';
return $default_attributes;
}
Modify default attributes of the button block.
$default_attributes
(array
) Default attributes of button block.
url
(string
) Default url of the button (Default: ''
)linkTarget
(string
) Default link target (Default: ''
). Possible values:
''
: Target attribute empty_blank
: Target attribute is set to _blank
rel
(string
) Default rel attribute of the link (Default: ''
)text
(string
) Default text of the button (Default: ''
)style
(string
) Default style of the button (Default: 'primary'
)alignment
(string
) Default alignment of the button (Default: ''
)add_filter( 'wp_bootstrap_blocks_button_default_attributes', 'my_button_default_attributes', 10, 1 );
function my_button_default_attributes( $default_attributes ) {
$default_attributes['url'] = 'https://getbootstrap.com/';
$default_attributes['linkTarget'] = '_blank';
$default_attributes['rel'] = 'noreferrer noopener';
$default_attributes['text'] = 'Bootstrap';
$default_attributes['style'] = 'secondary';
$default_attributes['alignment'] = 'right';
return $default_attributes;
}
Possibility to disable enqueuing block assets.
$enqueue_block_assets
(boolean
) Defines if block assets should be enqueued. (Default: true
)add_filter( 'wp_bootstrap_blocks_enqueue_block_assets', 'disable_enqueue_block_assets', 10, 1 );
function disable_enqueue_block_assets( $enqueue_block_assets ) {
// Disable enqueuing block assets
return false;
}
Fires when a new version of the plugin is used for the first time.
$new_version
(string
) New version number.$old_version
(string
) Old version number.add_action( 'wp-bootstrap-blocks_updated', 'my_after_plugin_update', 10, 2 );
function my_after_plugin_update( $new_version, $old_version ) {
echo "wp-bootstrap-blocks got updated from v" . $old_version . " to v" . $new_version;
}
The plugin provides the following JavaScript filters. They can be used by enqueuing a custom JavaScript file which implements those filters.
Example:
If you have a script called block-filters.js
inside your theme root you can enqueue it by adding the following code to your functions.php
file.
function mytheme_enqueue_block_editor_assets() {
wp_enqueue_script( 'block-filters', get_stylesheet_directory_uri() . '/block-filters.js', array( 'wp-hooks' ), '1.0.0', true );
}
add_action( 'enqueue_block_editor_assets', 'mytheme_enqueue_block_editor_assets' );
Please visit the following page to get further instructions on how to use JavaScript filters: https://developer.wordpress.org/block-editor/developers/filters/block-filters/.
Modify available button styles.
function myButtonStyleOptions( styleOptions ) {
styleOptions.push( {
label: 'My Option',
value: 'my-option',
bgColor: '#ff0000',
textColor: '#ffffff',
} );
return styleOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.button.styleOptions',
'myplugin/wp-bootstrap-blocks/button/styleOptions',
myButtonStyleOptions
);
styleOptions
(Array
) Array with button style options.Each styleOption
object should have the following attributes:
label
(string
) Label displayed in the select box.value
(string
) Value of the chosen option.bgColor
(string
) Background color of button shown in the editor.textColor
(string
) Text color of button shown in the editor.Modify margin after options.
function myMarginAfterOptions( marginAfterOptions ) {
marginAfterOptions.push( { label: 'Huge', value: 'mb-8' } );
return marginAfterOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.container.marginAfterOptions',
'myplugin/wp-bootstrap-blocks/container/marginAfterOptions',
myMarginAfterOptions
);
marginAfterOptions
(Array
) Array margin options.Each marginAfterOption
object should have the following attributes:
label
(string
) Label displayed in the select box.value
(string
) Value of the chosen option.Define block templates.
function myRowTemplates( templates ) {
templates.push( {
name: '1-3',
title: '2 Columns (1:3)',
icon: 'layout',
templateLock: 'all',
template: [
[
'wp-bootstrap-blocks/column',
{
sizeMd: 3,
},
],
[
'wp-bootstrap-blocks/column',
{
sizeMd: 9,
},
],
],
} );
return templates;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.row.templates',
'myplugin/wp-bootstrap-blocks/row/templates',
myRowTemplates
);
templates
(array
) List of template objects.Each template
object should have the following attributes:
name
(string
) Unique identifier of the templatetitle
(string
) Name of templateicon
(WPElement|string
) An element or Dashicon slug to show as a visual approximation of the template.templateLock
(string|false
)
false
: Columns can be added and removedall
: Columns can't be changedtemplate
(Array<Array>
) see template documentation
wp-bootstrap-blocks/column
supported!)Enable/Disable custom option in row templates.
// Disable custom row template
wp.hooks.addFilter(
'wpBootstrapBlocks.row.enableCustomTemplate',
'myplugin/wp-bootstrap-blocks/row/enableCustomTemplate',
() => false
);
enableCustomTemplate
(boolean
) Return true if custom row template should be enabled. (Default: true
)Modify available horizontal gutters options for row block.
function myRowHorizontalGuttersOptions( horizontalGuttersOptions ) {
horizontalGuttersOptions.push( { label: 'Medium', value: 'gx-4' } );
return horizontalGuttersOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.row.horizontalGuttersOptions',
'myplugin/wp-bootstrap-blocks/row/horizontalGuttersOptions',
myRowHorizontalGuttersOptions
);
horizontalGuttersOptions
(Array
) Array of horizontal gutters options.Modify available vertical gutters options for row block.
function myRowVerticalGuttersOptions( verticalGuttersOptions ) {
verticalGuttersOptions.push( { label: 'Medium', value: 'gy-4' } );
return verticalGuttersOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.row.verticalGuttersOptions',
'myplugin/wp-bootstrap-blocks/row/verticalGuttersOptions',
myRowVerticalGuttersOptions
);
verticalGuttersOptions
(Array
) Array of vertical gutters options.Modify available CSS grid gutters options for row block.
function myRowCssGridGuttersOptions( cssGridGuttersOptions ) {
cssGridGuttersOptions.push( { label: 'Medium', value: '1.5rem' } );
return cssGridGuttersOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.row.cssGridGuttersOptions',
'myplugin/wp-bootstrap-blocks/row/cssGridGuttersOptions',
myRowCssGridGuttersOptions
);
cssGridGuttersOptions
(Array
) Array of CSS grid gutters options.Modify available background colors for column block.
function myColumnBgColorOptions( bgColorOptions ) {
bgColorOptions.push( {
name: 'brand',
color: '#6EA644',
} );
return bgColorOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.column.bgColorOptions',
'myplugin/wp-bootstrap-blocks/column/bgColorOptions',
myColumnBgColorOptions
);
bgColorOptions
(Array
) Array of available background colors. Each element should be an object containing the name
of the color and the color
itself (see: https://github.com/WordPress/gutenberg/tree/master/packages/components/src/color-palette).Modify available padding options for column block.
function myColumnPaddingOptions( paddingOptions ) {
paddingOptions.push( { label: 'Huge', value: 'p-8' } );
return paddingOptions;
}
wp.hooks.addFilter(
'wpBootstrapBlocks.column.paddingOptions',
'myplugin/wp-bootstrap-blocks/column/paddingOptions',
myColumnPaddingOptions
);
paddingOptions
(Array
) Array of padding options.Clone this repository
Install composer dependencies
curl -s https://getcomposer.org/installer | php
php composer.phar install
Install Node dependencies
npm install
The build process is based on the official @wordpress/scripts
package.
npm start
: Compiles the block in development mode. Watches for any changes and reports back any errors in your code.npm run lint
: Lints JavaScript, CSS and package.json files.npm run build
: Build production code of your blocks inside build
folder.To extract the labels and generate the languages/wp-bootstrap-blocks.pot
file run the following command:
./scripts/translations/extract-messages.sh
To update the translation files (*.po
) run the following command:
./scripts/translations/update-translation-files.sh
To generate the *.mo
and *.json
translation files run the following command:
./scripts/translations/compile-translation-files.sh
The following commands can be used to set up a local dev environment. See the official documentation of @wordpress/env
for a complete list of commands.
npm run wp-env start
: Starts the Docker containers.npm run wp-env stop
: Stops the Docker containers.There are two types of tests for this plugin:
The PHPUnit tests are stored in the phpunit/
directory.
They use fixtures to validate the block output.
Each block variant which should be tested needs a manually created file called blockname__variant.html
.
This file contains the block presentation in the editor (a.k.a. the HTML comment presentation) and needs to be stored in the following folder:
phpunit/blockname/fixtures/blockname_variant.html
The second fixture of each variant is the blockname_variant.output.html
file.
This file gets automatically generated if the test runs for the first time and the environment variable WP_BOOTSTRAP_BLOCKS_RECORD
in the phpunit.xml.dist
file is set to true
.
To run the tests use the following command:
npm run test:unit:php
or the following command to run a specific test:
npm run test:unit:php -- --filter 'my_test'
The Playwright E2E Tests are stored in the playwright
directory.
To run the tests use the following command:
npm run test:e2e