コマンドの種類

コマンドを登録する方法は2つあります:静的または動的です。どちらの方法も、次の情報を提供するコマンドオブジェクトを引数として受け取ります:

  • name: コマンドの一意の機械可読名
  • label: 人間可読のラベル
  • icon: SVGアイコン
  • callback: コマンドが選択されたときに呼び出されるコールバック関数
  • context: (オプション)コマンドのコンテキスト

静的コマンド

静的コマンドは、wp.data.dispatch( wp.commands.store ).registerCommandアクションまたはwp.commands.useCommand Reactフックを使用して登録できます。静的コマンドは特定のアクションを実行するために一般的に使用されます。これには、新しいページを追加したり、エディターインターフェースのセクションを開いたりすることが含まれます。たとえば、エディタープリファレンスモーダルを開くことができます。以下のuseCommand コード例を参照してください。

動的コマンド

一方、動的コマンドは「コマンドローダー」、wp.commands.useCommandLoaderを使用して登録されます。これらのローダーは、コマンドパレットの入力にユーザーが入力した検索用語に依存するコマンドリストが必要な場合や、特定の条件が満たされたときにのみ利用可能なコマンドがある場合に必要です。

たとえば、ユーザーが「contact」と入力すると、コマンドパレットはその入力を使用して利用可能なページをフィルタリングし、連絡先ページを見つけようとします。以下のuseCommandLoader コード例を参照してください。

コンテキストコマンド

静的および動的コマンドはコンテキストに依存する場合があります。これは、特定のコンテキスト(たとえば、サイトエディターをナビゲートしているときやテンプレートを編集しているとき)で、特定のコマンドが優先され、コマンドパレットを開くとすぐに表示されることを意味します。また、コマンドパレットを入力しているとき、これらのコンテキストコマンドは他のコマンドの上に表示されます。

現在、2つのコンテキストが実装されています:

  • site-editor: サイトエディター(サイドバーが表示されている)でナビゲートしているときに設定されるコンテキストです。
  • site-editor-edit: サイトエディターでドキュメント(テンプレート、テンプレートパート、またはページ)を編集しているときに設定されるコンテキストです。
    コマンドパレットの使用が拡大するにつれて、さらに多くのコンテキストが追加されます。

特定のコンテキストにコマンドまたはコマンドローダーを添付するのは、contextプロパティ(上記の利用可能なコンテキストからの正しいコンテキスト値を使用)をuseCommandまたはuseCommandLoader呼び出しに追加するだけで簡単です。

WordPressデータAPI

コマンドパレットは、状態を操作するためのいくつかのセレクターとアクションを提供します。これには次のものが含まれます:

  • 次のセレクターgetCommandsおよびgetCommandLoaderを使用して登録されたコマンドとコマンドローダーを取得する
  • isOpenセレクターを使用してコマンドパレットが開いているかどうかを確認する。
  • openおよびcloseアクションを使用してプログラム的にコマンドパレットを開いたり閉じたりする。

詳細については、コマンドデータのドキュメントを参照してください。

インストール

モジュールをインストールします

  1. npm install @wordpress/commands --save

このパッケージは、あなたのコードがES2015+環境で実行されることを前提としています。このような言語機能やAPIのサポートが限られているか、まったくない環境を使用している場合は、コードに@wordpress/babel-preset-defaultで提供されるポリフィルを含める必要があります。

API

ストア

コマンドネームスペースのストア定義。

関連

使用法

  1. import { store as commandsStore } from '@wordpress/commands';
  2. import { useDispatch } from '@wordpress/data';
  3. ...
  4. const { open: openCommandCenter } = useDispatch( commandsStore );

タイプ

  • Object

useCommand

コマンドパレットにコマンドを添付します。静的コマンドに使用されます。

使用法

  1. import { useCommand } from '@wordpress/commands';
  2. import { plus } from '@wordpress/icons';
  3. useCommand( {
  4. name: 'myplugin/my-command-name',
  5. label: __( 'Add new post' ),
  6. icon: plus,
  7. callback: ( { close } ) => {
  8. document.location.href = 'post-new.php';
  9. close();
  10. },
  11. } );

パラメータ

  • コマンドimport('../store/actions').WPCommandConfig: コマンド設定。

useCommandLoader

コマンドパレットにコマンドローダーを添付します。動的コマンドに使用されます。

使用法

  1. import { useCommandLoader } from '@wordpress/commands';
  2. import { post, page, layout, symbolFilled } from '@wordpress/icons';
  3. const icons = {
  4. post,
  5. page,
  6. wp_template: layout,
  7. wp_template_part: symbolFilled,
  8. };
  9. function usePageSearchCommandLoader( { search } ) {
  10. // Retrieve the pages for the "search" term.
  11. const { records, isLoading } = useSelect( ( select ) => {
  12. const { getEntityRecords } = select( coreStore );
  13. const query = {
  14. search: !! search ? search : undefined,
  15. per_page: 10,
  16. orderby: search ? 'relevance' : 'date',
  17. };
  18. return {
  19. records: getEntityRecords( 'postType', 'page', query ),
  20. isLoading: ! select( coreStore ).hasFinishedResolution(
  21. 'getEntityRecords',
  22. 'postType', 'page', query ]
  23. ),
  24. };
  25. }, [ search ] );
  26. // Create the commands.
  27. const commands = useMemo( () => {
  28. return ( records ?? [] ).slice( 0, 10 ).map( ( record ) => {
  29. return {
  30. name: record.title?.rendered + ' ' + record.id,
  31. label: record.title?.rendered
  32. ? record.title?.rendered
  33. : __( '(no title)' ),
  34. icon: icons[ postType ],
  35. callback: ( { close } ) => {
  36. const args = {
  37. postType,
  38. postId: record.id,
  39. ...extraArgs,
  40. };
  41. document.location = addQueryArgs( 'site-editor.php', args );
  42. close();
  43. },
  44. };
  45. } );
  46. }, [ records, history ] );
  47. return {
  48. commands,
  49. isLoading,
  50. };
  51. }
  52. useCommandLoader( {
  53. name: 'myplugin/page-search',
  54. hook: usePageSearchCommandLoader,
  55. } );

パラメータ

  • ローダーimport('../store/actions').WPCommandLoaderConfig: コマンドローダー設定。

このパッケージへの貢献

これはGutenbergプロジェクトの一部である個別のパッケージです。このプロジェクトはモノレポとして整理されています。特定の目的を持つ複数の自己完結型ソフトウェアパッケージで構成されています。このモノレポ内のパッケージはnpmに公開され、WordPressや他のソフトウェアプロジェクトで使用されています。

このパッケージやGutenberg全体への貢献について詳しく知りたい場合は、プロジェクトの主要な貢献者ガイドをお読みください。