このページでは、このセクションの他のページではカバーされていない、投稿エディターとサイトエディターで特定の機能を無効にするさまざまな方法について説明します。
ブロックオプションの制限
特定のブロックをユーザーにまったく利用させたくない場合があります。インサーターで利用可能なブロックを制御するアプローチには2種類の方法があります。許可リストは、リストにあるブロック以外のすべてのブロックを無効にします。拒否リストは、特定のブロックの登録を解除します。
見出しレベルの管理
見出しレベルのドロップダウンを持つ WordPress コアブロックは levelOptions
属性をサポートします。該当のブロックは、見出し、サイトタイトル、サイトのキャッチフレーズ、クエリータイトル、投稿タイトル、コメントタイトルです。levelOptions
属性は見出しレベルに対応する数値の配列を取ります。たとえば 1
は H1、2
は H2を表します。
この属性を使用すると、ドロップダウン UI に表示される見出しレベルを指定できます。これによりブロックの非推奨プロセスを必要としない軽量の管理方法が提供されます。マークアップ内では既存の見出しレベルは維持される一方で、levelOptions
は UI 表示にのみ影響します。
この属性はブロックマークアップで直接、適用でき、これはブロックテンプレート、テンプレートパーツ、パターンでよく使われるテクニックです。例えば、次のマークアップは "levelOptions":[3,4,5]
を設定することで、見出しブロックの H1, H2, H6を無効化します。
<!-- wp:heading {"level":3,"levelOptions":[3,4,5],"className":"wp-block-heading"} -->
<h3 class="wp-block-heading">Markup example</h3>
<!-- /wp:heading -->
また、ブロックフィルターを使用して、この属性のデフォルト値をグローバルに、または特定のブロックに対して設定できます。以下の例では、すべての見出しブロックの H1, H2, H6を無効化しています。ユーザーの権限などの条件に基づいて特定の見出しレベルを制限することで、これをさらにカスタマイズできます。
function example_modify_heading_levels_globally( $args, $block_type ) {
if ( 'core/heading' !== $block_type ) {
return $args;
}
// H1、H2、H6 を削除
$args['attributes']['levelOptions']['default'] = [ 3, 4, 5 ];
return $args;
}
add_filter( 'register_block_type_args', 'example_modify_heading_levels_globally', 10, 2 );
パターンディレクトリの無効化
WordPress コアにバンドルされたパターンをインサーターから完全に削除するには、functions.php
ファイルに以下を追加します。
function example_theme_support() {
remove_theme_support( 'core-block-patterns' );
}
add_action( 'after_setup_theme', 'example_theme_support' );
ブロックバリエーションの無効化
コアのいくつかのブロックは実際には、ブロックのバリエーションです。例えば、Row (横並び) ブロックや Stack (縦積み) ブロックは、実際には Group (グループ) ブロックのバリエーションです。これらの「ブロック」を無効にしたい場合は、それぞれのバリエーションを無効にします。
ブロックのバリエーションは JavaScript を使用して登録されており、無効にする場合も JavaScript を使用します。以下のコードは、Row バリエーションを無効にします。
wp.domReady( () => {
wp.blocks.unregisterBlockVariation( 'core/group', 'group-row' );
});
テーマフォルダーのルートの disable-variations.js
ファイル内に上のコードを記述したとすると、テーマの functions.php
で次のコードを使用して、このファイルをエンキューできます。
function example_disable_variations_script() {
wp_enqueue_script(
'example-disable-variations-script',
get_template_directory_uri() . '/disable-variations.js',
array( 'wp-dom-ready' ),
wp_get_theme()->get( 'Version' ),
true
);
}
add_action( 'enqueue_block_editor_assets', 'example_disable_variations_script' );
ブロックスタイルの無効化
コアブロックの中には自身のブロックスタイルを持つものがいくつかあります。例えば、画像ブロックはには丸みを帯びた画像用のブロックスタイル「rounded」があります。しかしユーザーに画像を丸めさせたくない場合や、ブロックスタイルの代わりに border-radius コントロールを使いたい場合もああります。どちらの場合も、不要なブロックスタイルは簡単に無効化できます。
ブロックバリエーションと異なりスタイルは、JavaScript でも PHP でも登録できます。スタイルを JavaScript で登録した場合は、JavaScript で無効化する必要があります。PHP で登録した場合は、どちらでもスタイルを無効にできます。すべてのコアブロックのスタイルはJavaScript で登録されています。
したがって画像ブロックの「rounded」ブロックスタイルを無効にするには、以下のコードを使用します。
wp.domReady( () => {
wp.blocks.unregisterBlockStyle( 'core/image', 'rounded' );
});
この JavaScript は上のブロックバリエーションの例と同じように、エンキューしなければなりません。PHP を使用したスタイルの登録や解除方法については、ブロックスタイルのドキュメントを参照してください。
テンプレートエディターへのアクセスの無効化
クラシックテーマでもブロックテーマでも、theme.json を使用している場合は、functions.php
ファイルに以下を追加することで、投稿やページの編集時に利用できるテンプレートエディタへのアクセスを抑止できます。
function example_theme_support() {
remove_theme_support( 'block-templates');
}
add_action( 'after_setup_theme', 'example_theme_support' );
このコードにより、投稿エディターからの新規ブロックテンプレートの作成と編集の両方が抑止されます。
コードエディターへのアクセスの無効化
コードエディターでは、ページや投稿の裏側にあるブロックマークアップを参照できます。これはパワーユーザーには便利な機能ですが、誤ってコンテンツを編集することでブロックマークアップを破壊する可能性があります。functions.php
ファイルに以下のコードを追加すると、エディターへのアクセスを制限できます。
function example_restrict_code_editor_access( $settings, $context ) {
$settings[ 'codeEditingEnabled' ] = false;
return $settings;
}
add_filter( 'block_editor_settings_all', 'example_restrict_code_editor_access', 10, 2 );
このコードはすべてのユーザーの、コードエディターへのアクセスを抑止します。必要であれば権限のチェックを追加して、特定のユーザーのアクセスを抑止できます。
RichText ブロックのフォーマットオプションの無効化
RichText をサポートするブロックには、WordPress がデフォルトで提供するフォーマットオプションが付いていきます。
フォーマットオプションを無効にするには、JavaScriptで unregisterFormatType
を使用する必要があります。以下のコードはグローバルに、Inline Image、Language、Keyboard Input、Subscript、Superscript オプションを無効にします。
wp.domReady( () => {
wp.richText.unregisterFormatType( 'core/image' );
wp.richText.unregisterFormatType( 'core/language' );
wp.richText.unregisterFormatType( 'core/keyboard' );
wp.richText.unregisterFormatType( 'core/subscript' );
wp.richText.unregisterFormatType( 'core/superscript' );
});
この JavaScript は、上のブロックバリエーションの例と同じようにエンキューする必要があります。