ブロックの挿入・並べ替えを制限する (読了想定)

ブロックエディタには、ブロックを挿入・削除・並べ替えする機能があります。 決まったブロックを決まった順で使う、というような場合は、これらの機能を制限してみましょう。

Gutenbergのテンプレートロック機能

書籍P229で、ブロックテンプレート機能(初期配置機能)を取り上げました。初期配置機能と組み合わせると便利な機能として、テンプレートロック機能があります。 書籍では紙面の都合でテンプレートロック機能は割愛しましたが、代わりにここで紹介したいと思います。

テンプレートの操作

テンプレートロック機能の前に、テンプレートの操作としてどのような機能があるかを調べておきましょう。以下の機能があります。

  • 挿入 : ブロックを追加する
  • 編集 : ブロックを編集する
  • 移動 : ブロックを並べ替える
  • 削除 : ブロックを削除する

標準では、投稿時にこれらの機能を全て実行できるようになっています。

通常は全部の機能が使えると便利ですが、いつもそうとは限りません。 決まったブロックを決まった順で使う、というような場合もあるかもしれませんね。そういった場合に役立つのが、テンプレートロック機能です。

テンプレートロック機能の種類

WordPress5.2時点では、以下の2つがあります。

  • all : 挿入・削除・移動を禁止する。編集のみ許可する。
  • insert : 挿入・削除を禁止する。編集・移動は許可する。

カスタマイズ例は以下のようになります。

function php4wp_lock_template() {
    $post_type_object = get_post_type_object( 'post' );
    /*
        ここで、ブロックの初期配置を行う。詳細は、テキストP229-231
    */
    
    // 挿入・削除・移動を禁止する。編集のみ許可する。
    // $post_type_object->template_lock = "all"; 
    
    // 挿入・削除を禁止する。編集・移動は許可する。
    // $post_type_object->template_lock = "insert";
}
add_action( 'init', 'php4wp_lock_template' );

このように、ブロック操作に制限を加えておくと、ブロックを間違って消してしまう、といった操作ミスを防ぐことができます。

応用編: ユーザー権限により、操作を制限する

上のコード例は、全てのユーザーにテンプレートロック機能を適用していました。

WordPressの場合は、ユーザーの権限を分けられます。応用例として、「権限により、操作を制限する」をやってみましょう。

例:『管理者は全ての操作を許可する。
管理者でないユーザーには挿入・削除・移動を禁止し、編集のみ許可する。』

function myplugin_register_template() {
    $post_type_object = get_post_type_object( 'post' );
    /*
        ここで、ブロックの初期配置を行う。詳細は、テキストP229-231
    */
 
    // 管理者かどうかの判定
	if (!current_user_can( 'manage_options' ) ) {
		$post_type_object->template_lock = "all";
	}
}
add_action( 'init', 'myplugin_register_template' );

管理者かどうかの判定には、current_user_can() 関数を使っています。current_user_can( ‘manage_options’ ) と指定すると、「オプションを操作できるユーザー=管理者権限のユーザー」となります。

こうしておけば、ブロックの追加・削除・移動は管理者だけが行えるようになります。