ブロックエディタにラインマーカーを追加する方法(プラグインなし)

WordPressのブロックエディタに蛍光ペンでラインマーカーを引ける機能を追加してみました!プラグインなしで、functions.phpとJavaScriptを使って実現できるんです。結構簡単でしたよ!

highlight.js

テーマファイルのディレクトリの中に「js」ディレクトリを作って、その中に「highlight.js」を置くことにします。highlight.jsの内容は、以下のようになります。

JavaScript
/**
 * ブロックエディタにハイライト(蛍光ペン)を追加
 */
(function (richText, element, blockEditor) {}
    (
        window.wp.richText,
        window.wp.element,
        window.wp.blockEditor
    )
);

(function (richText, element, blockEditor) {
    richText.registerFormatType(`highlight/${myEditorObj[0].item}`, {
        title: myEditorObj[0].title,
        tagName: 'span',
        className: myEditorObj[0].class,
        edit: function (args) {
            return element.createElement(blockEditor.RichTextToolbarButton, {
                icon: 'admin-customizer',
                title: myEditorObj[0].title,
                onClick: function () {
                    args.onChange(richText.toggleFormat(args.value, {
                        type: `highlight/${myEditorObj[0].item}`
                    }));
                },
                isActive: args.isActive,
            });
        },
    })
}(
    window.wp.richText,
    window.wp.element,
    window.wp.blockEditor
));

functions.php

highlight.jsを読み込んで、エディタに「ハイライト(蛍光ペン)」という名前で編集メニューを追加します。

PHP
/**
 * ブロックエディタにハイライト(蛍光ペン)を追加
 */
add_action( 'enqueue_block_editor_assets', function () {
	wp_enqueue_script( 'highlight', get_theme_file_uri( 'js/highlight.js'), [
		'wp-element',
		'wp-rich-text',
		'wp-editor',
	]);
	wp_localize_script( 'highlight', 'myEditorObj', [
		[
			'item' => 'highlight',
			'title' => 'ハイライト(蛍光ペン)',
			'class' => 'text-highlight',
		]
	]);
});

style.css

スタイルシートのクラス「text-highlight」に対してスタイルを定義します。下記例では黄色の蛍光ペンでラインマーカーを引いたような見た目になります。

CSS
/* 蛍光ペン */
.text-highlight {
  background: linear-gradient(to top, #eaeb16 40%, transparent 40%);
  font-weight: bold;
}

実装結果

ブロックエディタに「ハイライト(蛍光ペン)」という名前でラインマーカー機能が追加されました!