Gutenberg(ブロックエディタ)を無効化する場合はとりあえずプラグイン「Classic Editor」を入れるぐらいの認識だったのですが、フックを使って限定的に無効とかもできるみたいなので備忘録です。

  • 紹介している方法はWordPress Ver 5.0.0で確認等行ったものです。
  • 紹介している方法を以前のバージョンで使用する場合は、フックをそれぞれgutenberg_can_edit_postgutenberg_can_edit_post_typeにする必要があります。

全体的にGutenbergを無効化

全体的にGutenbergを無効化を無効化したい場合は、functions.phpに下記のように記述します。

functions.php
add_filter( 'use_block_editor_for_post', '__return_false' );

特定のユーザーで無効化

Gutenbergを使いたいユーザーとそうでないユーザーがいた場合は、下記のように条件分岐を組み合わせれば特定のユーザーのみ無効化させることができます。

functions.php
// ユーザーIDが「1」の場合はGutenbergが無効化
if ( $current_user->ID === 1 ) {
  add_filter( 'use_block_editor_for_post', '__return_false' );
}

// ユーザー名が「admin」の場合はGutenbergが無効化
if ( $current_user->user_nicename === 'admin' ) {
  add_filter( 'use_block_editor_for_post', '__return_false' );
}

特定の投稿タイプで無効化

特定の投稿タイプでGutenbergを無効化したい場合は下記のように記述し、このサンプルコードは「固定ページ」のみ無効化されるようになります。

functions.php
add_filter( 'use_block_editor_for_post_type', 'disable_block_editor', 10, 2 );
function disable_block_editor( $use_block_editor, $post_type ) {
  if ( $post_type === 'page' ) return false;
  return $use_block_editor;
}

特定の投稿タイプ以外で無効化

上とは逆に特定の投稿タイプ以外で無効化したい場合は下記のように記述し、このサンプルコードは「固定ページ」以外の投稿タイプで無効化されるようになります。

functions.php
add_filter( 'use_block_editor_for_post_type', 'disable_block_editor', 10, 2 );
function disable_block_editor( $use_block_editor, $post_type ) {
  if ( $post_type !== 'page' ) return false;
  return $use_block_editor;
}

特定の投稿IDで無効化

特定の投稿IDのときに無効化したい場合は下記のように記述し、このサンプルコードは「3」の投稿IDを持つものだけ無効化されるようになり、具体的には単純にWordPressをインストールした直後とかであれば、デフォルトで用意されている「固定ページ > プライバシーポリシー」だけが無効化されているのを確認できます。

functions.php
add_filter( 'use_block_editor_for_post', 'disable_block_editor_for_post', 10, 2 );
function disable_block_editor_for_post( $use_block_editor, $post ) {
  if ( $post->ID === 3 ) return false;
  return $use_block_editor;
}

特定の投稿ID未満で無効化

古い投稿はこれまでのエディタを使用して比較的新しい投稿だけでGutenbergを使用したい場合は、下記のように記述することで特定の投稿ID未満で無効化させることで対応できます。
このサンプルコードは投稿IDが「100未満」の場合に無効化されるものになります。

functions.php
add_filter( 'use_block_editor_for_post', 'disable_block_editor_for_post', 10, 2 );
function disable_block_editor_for_post( $use_block_editor, $post ) {
  if ( $post->ID < 100 ) return false;
  return $use_block_editor;
}

より厳密に指定する

上のコードで特定の投稿ID未満で無効化することはできますが、これだと投稿タイプ関係なく「100未満」の場合すべてで無効化されてしまうので、自分は「投稿」だけに適用したかったつもりでも「固定ページ」などのその他投稿タイプにも適用されてしまいます。
「投稿」で且つIDが100未満の場合であれば、下記のように併せて投稿タイプも条件に加えるとより厳密に無効化する投稿を指定できます。

functions.php
add_filter( 'use_block_editor_for_post', 'disable_block_editor_for_post', 10, 2 );
function disable_block_editor_for_post( $use_block_editor, $post ) {
  if ( $post->ID < 100 && $post->post_type === 'post' ) return false;
  return $use_block_editor;
}

特定のスラッグで無効化

特定のスラッグのときに無効化したい場合は下記のように記述し、このサンプルコードは「privacy-policy」というスラッグを持つものだけ無効化されるようになります。

functions.php
add_filter( 'use_block_editor_for_post', 'disable_block_editor_for_post', 10, 2 );
function disable_block_editor_for_post( $use_block_editor, $post ) {
  if ( $post->post_name === 'privacy-policy' ) return false;
  return $use_block_editor;
}

より厳密に指定する

上のコードでも無効化することができますが、これだと投稿タイプ関係なく「privacy-policy」というスラッグを持つものすべてで無効化されてしまいます。
6. 特定の投稿ID未満は無効化」で紹介したときと同様で、下記のように併せて投稿タイプも条件に加えるとより厳密に無効化する投稿を指定できます。

functions.php
add_filter( 'use_block_editor_for_post', 'disable_block_editor_for_post', 10, 2 );
function disable_block_editor_for_post( $use_block_editor, $post ) {
  if ( $post->post_name === 'privacy-policy' && $post->post_type === 'page' ) return false;
  return $use_block_editor;
}