classic editorプラグインを試してみた

説明

WordPress 5.0 beta1のリリースにあわせて旧エディター環境を実現できる「classic editor」(バージョン0.5.0)が公開された。自分が公開しているプラグインの一部が旧エディター環境に依存していることもあり、さっそく試してみた。WordPress 5.0正式リリースに合わせてclassic editorも1.0がリリースされたので、それについて追記しました。

2つのモードが選択できる

WordPress 5.0 beta1の投稿編集画面は新エディターのみとなっており、そのままでは旧エディターが使用できない。そこで登場するのがclassic editorプラグインである。このプラグインをインストール・有効化すると、「設定」-「投稿設定」に「旧エディター設定」という項目が追加される。

追加された「旧エディター設定」

ここで「Replace the Block editor with the Classic editor.」を選択すると旧エディターのみを使用する状態に、「Use the Block editor by default and include optional links back to the Classic editor.」を選択するとWordPress 4.9.8+Gutenbergプラグインと同じように新エディターと旧エディターを併用する状態となる。新エディターに移行しにくいサイトを持っている身としてはとても助かる機能である。

新旧エディターを切り替えるタイミング

classic editorプラグインがどのようにエディターを切り替えるているのか気になったので、ソースコードを軽く覗いてみた。

add_action( 'plugins_loaded', 'classic_editor_init_actions' );

classic editorプラグインは冒頭でplugins_loadedアクションをフックしている。このアクション、有効になっているプラグインをすべて読み込んだ直後に実行されるアクションで、 add_action関数ではプライオリティが省略されているので、この場合は10となる。エディター関連で何らかの処理を行う必要があるなら、このタイミングは覚えておきたい。

次にplugins_loadedアクションで実行されるclassic_editor_init_actions関数の中身を見ていこう。

if ( has_filter( 'replace_editor', 'gutenberg_init' ) ) {
	// Gutenberg is installed and activated.
	$gutenberg = true;
}

if ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) ) {
	// Block editor.
	$block_editor = true;
}

新エディター環境の判定は、まずGutenbergプラグインが有効になっているかを調べ、その後でWordPressのバージョンが5.0 beta以降かを調べている。「旧エディター設定」のところでも記載されているように、WordPressのバージョン5.0では新エディターのことを「Block editor」と呼んでいるようだ。

$replace = ( get_option( 'classic-editor-replace' ) !== 'no-replace' );

if ( $block_editor && ( $replace || isset( $_GET['classic-editor'] ) ) ) {
	// TODO: consider disabling other block editor functionality.
	add_filter( 'use_block_editor_for_post_type', '__return_false', 100 );
}

続いて「旧エディター設定」を get_option関数で取得し、'no-replace'と比較している。この条件式、「=== 'replace'」の方が自然なのではと思いつつ次行に移る。

「Block editor」が有効な状態で旧エディターに切り替える場合に、use_block_editor_for_post_typeフィルターで返り値にfalseを返すようにしている。use_block_editor_for_post_typeフィルターは管理画面向けに5.0で追加された同名の関数で実行されるフィルターで、旧エディターへの切り替えだけならこれだけで実現できる。これに対し、Gutenbergプラグインが有効な状態で旧エディターに切り替える場合は、関連する複数のフィルターやアクションを取り除いている。

classic editorプラグインの更新も注目

自分が公開しているプラグインには新エディター環境で何等かの対応が必要なものがある。プラグインのウィジェット出力部分でエディターを判定する場合は次のような感じだろう。

$editor = 'classic';
if ( has_filter( 'replace_editor', 'gutenberg_init' ) ) {
	$editor = 'gutenberg';
} elseif ( version_compare( $GLOBALS['wp_version'], '5.0-beta', '>' ) &&
	use_block_editor_for_post_type( $post_type ) ) {
	$editor = 'block';
}

今回試したclassic editorプラグインはバージョン0.5.0であり、WordPress 5.0本体も正式リリースまでに内容が変わる可能性がある。その点は留意いただきたい。

追記:classic editorプラグイン1.0で仕様が変更

WordPress 5.0のリリースに合わせてアップデートされたclassic editorプラグイン1.0では設定内容が変更された。

classic editor 1.0で設定内容が変更された(この表示は1.2の翻訳適用済み)

classic editor 0.5ではブロックエディターをデフォルトにしてクラシックエディター(旧エディター)を併用するか、クラシックエディターのみにするかの選択だったが、1.0では2つの選択オプションの組み合わせにより選択肢が4種類に広がっている。

  1. 常にブロックエディター
  2. 常にクラシックエディター
  3. 新規追加時のデフォルトはブロックエディターでクラシックエディターも利用可
  4. 新規追加時のデフォルトはクラシックエディターでブロックエディターも利用可

「ユーザーにエディターの切り替えを許可します。」が「はい」の場合、新規追加時は「すべてのユーザーのデフォルトエディター」で設定されているエディターとなるが、既存の投稿を投稿一覧から「投稿タイトル」をクリックして編集する場合はコンテント内容によりエディターが切り替わる(ホバー表示される「ブロックエディター」「クラシックエディター」リンクをクリックした場合はそのエディターで編集となる)。

なお、上記の設定内容は get_option関数で取得できる。

$editor = get_option( 'classic-editor-replace' );	// 'block'または'classic'
$allow = get_option( 'classic-editor-allow-users' );	// 'allow'または'disallow'

最終更新 : 2018年12月10日 10:25

お勧め

get_post_format_strings(2011年9月12日 更新)

string get_post_format_strings( )
投稿フォーマット名の一覧を取得する。

get_allowed_mime_types(2012年12月20日 更新)

array get_allowed_mime_types( )
有効なMIMEタイプを取得する。

get_category_parents(2018年5月27日 更新)

mixed get_category_parents( int $id [ , bool $link = false [ , string $separator = '/' [ , bool $nicename = false [ , array $deprecated $visited = array() ] ] ] ] )
親カテゴリー名を含んだカテゴリー名を取得する。

wp_remote_post(2017年5月23日 更新)

mixed wp_remote_post( string $url [ , array $args = array() ] )
POSTメソッドを送信する。

set_url_scheme(2018年5月27日 更新)

string set_url_scheme( string $url, string $scheme = null )
URLに適正なスキーマをセットする。