概要

Format APIは、開発者がフォーマットツールバーにカスタムボタンを追加し、それをテキスト選択にフォーマットを適用することを可能にします。太字はフォーマットツールバーの標準ボタンの一例です。

Format APIツールバーのアニメーション例

WordPress用語では、フォーマットは、テキスト選択に特別な意味を与えるために使用されるテキストレベルの意味を持つHTMLタグです。たとえば、このチュートリアルでは、フォーマットツールバーにフックされるボタンが特定のテキスト選択を<samp> HTMLタグでラップします。

始める前に

このガイドは、すでにWordPressプラグインとそれにJavaScriptを読み込むことに慣れていることを前提としています。復習するには、プラグインハンドブックまたはJavaScriptチュートリアルを参照してください。

必要なもの:

  • WordPress開発環境
  • 編集の準備が整った最小限のプラグイン
  • ビルドとエンキュー用のJavaScript設定

完全なformat-apiの例が利用可能で、セットアップの参考にできます。

ステップバイステップガイド

このガイドでは、src/index.jsを変更が行われるJavaScriptファイルとして参照します。各ステップの後、npm run buildを実行すると、build/index.jsが作成され、次に投稿エディタ画面に読み込まれます。

ステップ1: 新しいフォーマットを登録する

最初のステップは新しいフォーマットを登録することです。次のようにsrc/index.jsを追加します:

  1. import { registerFormatType } from '@wordpress/rich-text';
  2. registerFormatType( 'my-custom-format/sample-output', {
  3. title: 'Sample output',
  4. tagName: 'samp',
  5. className: null,
  6. } );

利用可能なフォーマットタイプのリストはcore/rich-textストアに保持されています。ストアをクエリして、カスタムフォーマットが利用可能になっているか確認できます。

このコードをブラウザのコンソールで実行して確認してください:

  1. wp.data.select( 'core/rich-text' ).getFormatTypes();

フォーマットタイプを含む配列が返されます。

ステップ2: ツールバーにボタンを追加する

フォーマットが利用可能になったので、次のステップは、編集プロパティのためにコンポーネントを登録してUIにボタンを追加することです。

  1. ``````bash
  2. import { registerFormatType } from '@wordpress/rich-text';
  3. import { RichTextToolbarButton } from '@wordpress/block-editor';
  4. const MyCustomButton = ( props ) => {
  5. return (
  6. <RichTextToolbarButton
  7. icon="editor-code"
  8. title="Sample output"
  9. onClick={ () => {
  10. console.log( 'toggle format' );
  11. } }
  12. />
  13. );
  14. };
  15. registerFormatType( 'my-custom-format/sample-output', {
  16. title: 'Sample output',
  17. tagName: 'samp',
  18. className: null,
  19. edit: MyCustomButton,
  20. } );
  21. `

すべてが期待通りに動作しているか確認しましょう。ビルドしてリロードし、段落ブロックのようなテキストを含む任意のブロックを選択します。新しいボタンがフォーマットツールバーに追加されたことを確認してください。

カスタムボタン付きツールバー

ボタンをクリックし、コンソールログで「トグルフォーマット」メッセージを確認します。

ボタンやメッセージが表示されない場合は、JavaScriptが正しくビルドされ、読み込まれているか再確認し、コンソールログでエラーメッセージを確認してください。

ステップ3: クリック時にフォーマットを適用する

次は、クリック時にフォーマットを適用するようにボタンを更新します。

私たちの例では、<samp>タグフォーマットはバイナリです - テキスト選択がタグを持っているかどうかですので、RichTextパッケージのtoggleFormatメソッドを使用できます。

  1. ``````bash
  2. import { registerFormatType, toggleFormat } from '@wordpress/rich-text';
  3. import { RichTextToolbarButton } from '@wordpress/block-editor';
  4. const MyCustomButton = ( { isActive, onChange, value } ) => {
  5. return (
  6. <RichTextToolbarButton
  7. icon="editor-code"
  8. title="Sample output"
  9. onClick={ () => {
  10. onChange(
  11. toggleFormat( value, {
  12. type: 'my-custom-format/sample-output',
  13. } )
  14. );
  15. } }
  16. isActive={ isActive }
  17. />
  18. );
  19. };
  20. registerFormatType( 'my-custom-format/sample-output', {
  21. title: 'Sample output',
  22. tagName: 'samp',
  23. className: null,
  24. edit: MyCustomButton,
  25. } );
  26. `

動作していることを確認します: まずビルドしてリロードし、次にテキストを選択してボタンをクリックします。ブラウザは、その選択を周囲のテキストとは異なる方法で表示する可能性があります。

HTMLビュー(コードエディタCtrl+Shift+Alt+M)に切り替えて、<samp> HTMLタグでラップされたテキスト選択を確認することもできます。

登録時にclassNameオプションを使用して、タグに独自のカスタムクラスを追加します。そのクラスとカスタムCSSを使用して、その要素をターゲットにし、スタイルを自由に設定できます。

ステップ4: 特定のブロックにのみボタンを表示する(オプション)

デフォルトでは、ボタンはすべてのリッチテキストツールバー(画像キャプション、ボタン、段落など)にレンダリングされます。特定のタイプのブロックにのみボタンをレンダリングするには、データAPIを使用します。

以下は、段落ブロックにのみボタンを表示する例です:

  1. import { registerFormatType, toggleFormat } from '@wordpress/rich-text';
  2. import { RichTextToolbarButton } from '@wordpress/block-editor';
  3. import { useSelect } from '@wordpress/data';
  4. function ConditionalButton( { isActive, onChange, value } ) {
  5. const selectedBlock = useSelect( ( select ) => {
  6. return select( 'core/block-editor' ).getSelectedBlock();
  7. }, [] );
  8. if ( selectedBlock && selectedBlock.name !== 'core/paragraph' ) {
  9. return null;
  10. }
  11. return (
  12. <RichTextToolbarButton
  13. icon="editor-code"
  14. title="Sample output"
  15. onClick={ () => {
  16. onChange(
  17. toggleFormat( value, {
  18. type: 'my-custom-format/sample-output',
  19. } )
  20. );
  21. } }
  22. isActive={ isActive }
  23. />
  24. );
  25. }
  26. registerFormatType( 'my-custom-format/sample-output', {
  27. title: 'Sample output',
  28. tagName: 'samp',
  29. className: null,
  30. edit: ConditionalButton,
  31. } );

ステップ5: ドロップダウンの外にボタンを追加する(オプション)

  1. ``````bash
  2. import { registerFormatType, toggleFormat } from '@wordpress/rich-text';
  3. import { BlockControls } from '@wordpress/block-editor';
  4. import { ToolbarGroup, ToolbarButton } from '@wordpress/components';
  5. const MyCustomButton = ( { isActive, onChange, value } ) => {
  6. return (
  7. <BlockControls>
  8. <ToolbarGroup>
  9. <ToolbarButton
  10. icon="editor-code"
  11. title="Sample output"
  12. onClick={ () => {
  13. onChange(
  14. toggleFormat( value, {
  15. type: 'my-custom-format/sample-output',
  16. } )
  17. );
  18. } }
  19. isActive={ isActive }
  20. />
  21. </ToolbarGroup>
  22. </BlockControls>
  23. );
  24. };
  25. registerFormatType( 'my-custom-format/sample-output', {
  26. title: 'Sample output',
  27. tagName: 'samp',
  28. className: null,
  29. edit: MyCustomButton,
  30. } );
  31. `

トラブルシューティング

エラーが発生した場合:

  • まずnpm run buildを実行していることを再確認してください。
  • ビルドプロセスに構文エラーや問題がないことを確認してください。
  • エディタでJavaScriptが読み込まれていることを確認してください。
  • コンソールエラーメッセージを確認してください。

追加リソース

このガイドで使用された参考文献:

結論

このガイドでは、ツールバーにボタンを追加し、それを選択したテキストにフォーマットを適用する方法を示しました。試してみて、次のプラグインで何が作れるか見てみてください。

format-apiの例block-development-examplesリポジトリからダウンロードしてください。