特定のブロックの移動または削除の能力をロックする
ユーザーはエディターを介してブロックをロックおよびアンロックできます。ロックUIには、コンテンツキャンバス内でブロックが移動されるのを防ぐか、削除されるのを防ぐオプションがあります:
「内部のすべてのブロックに適用」オプションをオンにすることで、含まれるブロック内にネストされたブロックにロックオプションを適用できることに注意してください。ただし、それ以外の方法でブロックを一括ロックすることはできません。
特定のブロックの編集能力をロックする
ブロックの移動または削除をロックする機能に加えて、ナビゲーションブロックおよび再利用可能ブロックには、ブロックの内容を編集する能力をロックする追加機能があります。これにより、いずれのブロックタイプ内のブロックに対して変更を加える能力がロックされます。
パターンまたはテンプレートにブロックロックを適用する
パターンやテンプレートを構築する際、テーマ作成者はこれらの同じUIツールを使用してブロックのデフォルトのロック状態を設定できます。たとえば、テーマ作成者はヘッダーのさまざまな部分をロックできます。デフォルトでは、編集アクセスを持つユーザーはこれらのブロックのロックを解除できることに注意してください。こちらはさまざまな方法でロックされたブロックを持つパターンの例ですおよびロックされたブロックを持つテンプレートの作成に関する詳細。これらのパターンは、エディター自体で構築でき、ロックオプションを追加した後、ドキュメントに従って登録します。
パターンまたはテンプレートでコンテンツのみの編集を適用する
この機能はWordPress 6.1で導入されました。ブロックロックがブロックの移動または削除の能力を無効にするのに対し、コンテンツのみの編集はパターンまたはテンプレートレベルでの使用を目的としており、すべてのデザインツールを隠しながら、ブロックの内容を編集する能力を保持します。これにより、ユーザーのインターフェースを簡素化し、デザインを保持する優れた方法が提供されます。このオプションが追加されると、次の変更が発生します:
- 非コンテンツの子ブロック(コンテナ、スペーサー、カラムなど)はリストビューから隠され、キャンバス上でクリックできず、完全に編集できなくなります。
- インスペクターはすべての子「コンテンツ」ブロックのリストを表示します。このリスト内のブロックをクリックすると、その設定パネルが表示されます。
- メインリストビューは、実際のネストに関係なく、すべて同じレベルのコンテンツブロックのみを表示します。
- 全体のコンテンツロックされたコンテナ内の子ブロックは自動的に移動/削除がロックされます。
- 追加の子ブロックは挿入できず、デザインとレイアウトがさらに保持されます。
- ブロックツールバーには「変更」するためのリンクがあり、ユーザーはこれをオン/オフに切り替えて、より広範なデザインツールにアクセスできます。現在、このオプションをプログラム的に削除することはできません。
このオプションは、カラム、カバー、グループブロック、およびblock.json内にtemplateLock属性を持つサードパーティのブロックにも適用できます。この機能を採用するには、"templateLock":"contentOnly"
を使用する必要があります。こちらはこの機能が実装されたパターンの例です。詳細については、関連ドキュメントを確認してください。
注意:コンテンツロックを管理するためのUIはなく、コードレベルで管理する必要があります。
ロック能力を制御するための権限を変更する
エージェンシーやプラグイン作成者は、どのユーザーがブロックをロックおよびアンロックする権限を持つかを制限することで、さらにキュレーションされた体験を提供できます。デフォルトでは、管理者であるユーザーはブロックをロックおよびアンロックするアクセス権を持ちます。
開発者は、block_editor_settings_allフックにフィルターを追加して、ブロックのロックに関する権限を構成できます。このフックは、コールバック関数に2つのパラメータを渡します:
$settings
– エディターの設定を構成可能な配列。$context
– 現在のエディターに関する情報を含むオブジェクトであるWP_Block_Editor_Contextのインスタンス。
具体的には、開発者は$settings['canLockBlocks']
の値をtrue
またはfalse
に設定することで変更できます。通常は1つ以上の条件チェックを通じて実行されます。
次の例は、ページを編集する際にすべてのユーザーのブロックロック権限を無効にします:
add_filter( 'block_editor_settings_all', function( $settings, $context ) {
if ( $context->post && 'page' === $context->post->post_type ) {
$settings['canLockBlocks'] = false;
}
return $settings;
}, 10, 2 );
もう1つの一般的な使用例は、サイトの視覚デザインを編集できるユーザー(テーマ編集)にのみブロックをロックまたはアンロックさせることです。最良のオプションは、次のコードスニペットに示すようにedit_theme_options
の能力に対してテストすることです:
add_filter( 'block_editor_settings_all', function( $settings ) {
$settings['canLockBlocks'] = current_user_can( 'edit_theme_options' );
return $settings;
} );
開発者は、誰がブロックをロック/アンロックできるかを判断するために、任意のタイプの条件チェックを使用できます。これはフィルターフックを介して可能なことのほんの一部のサンプリングに過ぎません。