コマンドの種類
コマンドを登録する方法は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
アクションを使用してプログラム的にコマンドパレットを開いたり閉じたりする。
詳細については、コマンドデータのドキュメントを参照してください。
インストール
モジュールをインストールします
npm install @wordpress/commands --save
このパッケージは、あなたのコードがES2015+環境で実行されることを前提としています。このような言語機能やAPIのサポートが限られているか、まったくない環境を使用している場合は、コードに@wordpress/babel-preset-default
で提供されるポリフィルを含める必要があります。
API
ストア
コマンドネームスペースのストア定義。
関連
使用法
import { store as commandsStore } from '@wordpress/commands';
import { useDispatch } from '@wordpress/data';
...
const { open: openCommandCenter } = useDispatch( commandsStore );
タイプ
useCommand
コマンドパレットにコマンドを添付します。静的コマンドに使用されます。
使用法
import { useCommand } from '@wordpress/commands';
import { plus } from '@wordpress/icons';
useCommand( {
name: 'myplugin/my-command-name',
label: __( 'Add new post' ),
icon: plus,
callback: ( { close } ) => {
document.location.href = 'post-new.php';
close();
},
} );
パラメータ
useCommandLoader
コマンドパレットにコマンドローダーを添付します。動的コマンドに使用されます。
使用法
import { useCommandLoader } from '@wordpress/commands';
import { post, page, layout, symbolFilled } from '@wordpress/icons';
const icons = {
post,
page,
wp_template: layout,
wp_template_part: symbolFilled,
};
function usePageSearchCommandLoader( { search } ) {
// Retrieve the pages for the "search" term.
const { records, isLoading } = useSelect( ( select ) => {
const { getEntityRecords } = select( coreStore );
const query = {
search: !! search ? search : undefined,
per_page: 10,
orderby: search ? 'relevance' : 'date',
};
return {
records: getEntityRecords( 'postType', 'page', query ),
isLoading: ! select( coreStore ).hasFinishedResolution(
'getEntityRecords',
'postType', 'page', query ]
),
};
}, [ search ] );
// Create the commands.
const commands = useMemo( () => {
return ( records ?? [] ).slice( 0, 10 ).map( ( record ) => {
return {
name: record.title?.rendered + ' ' + record.id,
label: record.title?.rendered
? record.title?.rendered
: __( '(no title)' ),
icon: icons[ postType ],
callback: ( { close } ) => {
const args = {
postType,
postId: record.id,
...extraArgs,
};
document.location = addQueryArgs( 'site-editor.php', args );
close();
},
};
} );
}, [ records, history ] );
return {
commands,
isLoading,
};
}
useCommandLoader( {
name: 'myplugin/page-search',
hook: usePageSearchCommandLoader,
} );
パラメータ
このパッケージへの貢献
これはGutenbergプロジェクトの一部である個別のパッケージです。このプロジェクトはモノレポとして整理されています。特定の目的を持つ複数の自己完結型ソフトウェアパッケージで構成されています。このモノレポ内のパッケージはnpmに公開され、WordPressや他のソフトウェアプロジェクトで使用されています。
このパッケージやGutenberg全体への貢献について詳しく知りたい場合は、プロジェクトの主要な貢献者ガイドをお読みください。