Как вернуть классический редактор WordPress (оригинальный, прежний редактор) — отключаем Гутенберг полностью или для типа записи

В версии WordPress 5.0, наконец, в ядре появился долгожданный новый редактор контента записи «редактор блоков», известный также как Гутенберг (Gutenderg). Он полностью изменил страницу редактирования записи и принцип написания контента. На некоторых сайтах такие кардинальные изменения могут сломать текущий функционал, поэтому там этот редактор нужно будет отключить.

В этой заметке разберемся, как вернуть старый/классический/оригинальный редактор кода в WordPress. Сделать это можно жестко в коде или используя плагины, которые дают возможность настроить где отключать новый редактор блоков.

Как полностью отключить редактор блоков Gutenberg (через код)

Отключить редактор позволяет хук use_block_editor_for_post_type.

Вставьте следующий код в файле темы functions.php или куда-либо еще:

GitHub
<?php
/***
 * Disables Gutenberg (the new block editor in WordPress).
 *
 * @version 2.0
 */

did_action( 'plugins_loaded' )
	? Kama_Disable_Gutenberg::init()
	: add_action( 'plugins_loaded', [ Kama_Disable_Gutenberg::class, 'init' ] );

final class Kama_Disable_Gutenberg {

	public static function init() {
		add_filter( 'use_block_editor_for_post_type', '__return_false', 100 );

		// disable <style id='global-styles-inline-css'>body{--wp--preset--color--black: #000000; ...
		// see wp_enqueue_global_styles()
		remove_action( 'wp_enqueue_scripts', 'wp_enqueue_global_styles' );
		remove_action( 'wp_footer', 'wp_enqueue_global_styles', 1 );

		remove_theme_support( 'core-block-patterns' ); // WP 5.5

		// disable basic css styles for blocks
		// IMPORTANT! when widgets on blocks or something else will be released, this line will need to be commented out.
		remove_action( 'wp_enqueue_scripts', 'wp_common_block_scripts_and_styles' );

		// don't do noneeded operations
		remove_filter( 'the_content', 'do_blocks', 9 );
		remove_filter( 'widget_block_content', 'do_blocks', 9 );

		add_action( 'admin_init', [ __CLASS__, 'on_admin_init' ] );

		self::remove_gutenberg_hooks();
	}

	public static function on_admin_init(){
		// Move the Privacy Policy help notice back under the title field.
		remove_action( 'admin_notices', [ WP_Privacy_Policy_Content::class, 'notice' ] );
		add_action( 'edit_form_after_title', [ WP_Privacy_Policy_Content::class, 'notice' ] );
	}

	/**
	 * Copy from Classic Editor plugin v1.6.3.
	 * @see https://plugins.svn.wordpress.org/classic-editor/trunk/classic-editor.php
	 */
	private static function remove_gutenberg_hooks( $remove = 'all' ) {
		remove_action( 'admin_menu', 'gutenberg_menu' );
		remove_action( 'admin_init', 'gutenberg_redirect_demo' );

		if ( $remove !== 'all' ) {
			return;
		}

		// Gutenberg 5.3+
		remove_action( 'wp_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
		remove_action( 'admin_enqueue_scripts', 'gutenberg_register_scripts_and_styles' );
		remove_action( 'admin_notices', 'gutenberg_wordpress_version_notice' );
		remove_action( 'rest_api_init', 'gutenberg_register_rest_widget_updater_routes' );
		remove_action( 'admin_print_styles', 'gutenberg_block_editor_admin_print_styles' );
		remove_action( 'admin_print_scripts', 'gutenberg_block_editor_admin_print_scripts' );
		remove_action( 'admin_print_footer_scripts', 'gutenberg_block_editor_admin_print_footer_scripts' );
		remove_action( 'admin_footer', 'gutenberg_block_editor_admin_footer' );
		remove_action( 'admin_enqueue_scripts', 'gutenberg_widgets_init' );
		remove_action( 'admin_notices', 'gutenberg_build_files_notice' );

		remove_filter( 'load_script_translation_file', 'gutenberg_override_translation_file' );
		remove_filter( 'block_editor_settings', 'gutenberg_extend_block_editor_styles' );
		remove_filter( 'default_content', 'gutenberg_default_demo_content' );
		remove_filter( 'default_title', 'gutenberg_default_demo_title' );
		remove_filter( 'block_editor_settings', 'gutenberg_legacy_widget_settings' );
		remove_filter( 'rest_request_after_callbacks', 'gutenberg_filter_oembed_result' );

		// Previously used, compat for older Gutenberg versions.
		remove_filter( 'wp_refresh_nonces', 'gutenberg_add_rest_nonce_to_heartbeat_response_headers' );
		remove_filter( 'get_edit_post_link', 'gutenberg_revisions_link_to_editor' );
		remove_filter( 'wp_prepare_revision_for_js', 'gutenberg_revisions_restore' );

		remove_action( 'rest_api_init', 'gutenberg_register_rest_routes' );
		remove_action( 'rest_api_init', 'gutenberg_add_taxonomy_visibility_field' );
		remove_filter( 'registered_post_type', 'gutenberg_register_post_prepare_functions' );

		remove_action( 'do_meta_boxes', 'gutenberg_meta_box_save' );
		remove_action( 'submitpost_box', 'gutenberg_intercept_meta_box_render' );
		remove_action( 'submitpage_box', 'gutenberg_intercept_meta_box_render' );
		remove_action( 'edit_page_form', 'gutenberg_intercept_meta_box_render' );
		remove_action( 'edit_form_advanced', 'gutenberg_intercept_meta_box_render' );
		remove_filter( 'redirect_post_location', 'gutenberg_meta_box_save_redirect' );
		remove_filter( 'filter_gutenberg_meta_boxes', 'gutenberg_filter_meta_boxes' );

		remove_filter( 'body_class', 'gutenberg_add_responsive_body_class' );
		remove_filter( 'admin_url', 'gutenberg_modify_add_new_button_url' ); // old
		remove_action( 'admin_enqueue_scripts', 'gutenberg_check_if_classic_needs_warning_about_blocks' );
		remove_filter( 'register_post_type_args', 'gutenberg_filter_post_type_labels' );

		// phpcs:disable Squiz.PHP.CommentedOutCode.Found
		// Keep
		// remove_filter( 'wp_kses_allowed_html', 'gutenberg_kses_allowedtags', 10, 2 ); // not needed in 5.0
		// remove_filter( 'bulk_actions-edit-wp_block', 'gutenberg_block_bulk_actions' );
		// remove_filter( 'wp_insert_post_data', 'gutenberg_remove_wpcom_markdown_support' );
		// remove_filter( 'the_content', 'do_blocks', 9 );
		// remove_action( 'init', 'gutenberg_register_post_types' );

		// Continue to manage wpautop for posts that were edited in Gutenberg.
		// remove_filter( 'wp_editor_settings', 'gutenberg_disable_editor_settings_wpautop' );
		// remove_filter( 'the_content', 'gutenberg_wpautop', 8 );
		// phpcs:enable Squiz.PHP.CommentedOutCode.Found

	}

}

Включить/отключить Гутенберг для отдельной записи (поста), можно через хук use_block_editor_for_post.

Также, Блочный редактор можно отключить через метабокс, если передать параметр __block_editor_compatible_meta_box = false при регистрации метабокса, подробнее смотрите в описании add_meta_box().

Как отключить Gutenberg для произвольных типов записей (WordPress)

Бывают случаи, когда тип записи нуждается в простом интерфейсе без редактора блоков, тогда возникает необходимость отключить редактор Gutenberg для пользовательского типа записи.

Пример ниже показывает, как отключить Gutenberg для указанных типов записей, оставив при работоспособность для всех остальных типов записей.

Этот PHP сниппет отключит редактор блоков для двух типов записей: book, movie.

# Отключает Gutenberg для произвольных типов записей
add_filter( 'use_block_editor_for_post_type', 'my_disable_gutenberg', 10, 2 );

function my_disable_gutenberg( $current_status, $post_type ) {

	$disabled_post_types = [ 'book', 'movie' ];

	return ! in_array( $post_type, $disabled_post_types, true );
}

Код можно использовать в файле functions.php или плагине.

Подробнее смотрите хук: use_block_editor_for_post_type.

Отключаем Gutenberg (через плагин Disable Gutenberg)

Disable Gutenberg — это альтернатива плагина Classic Editor. Разработана разработчиком на WP c 15-летним опытом.

Отключаем Gutenberg (через плагин Classic Editor)

Classic Editor — плагин отключает редактор блоков Гутенберг.

Если нужно оставить возможность использовать Гутенберг на сайте (иметь возможность одни статьи править в новом редакторе, а другие в классическом), то жесткое отключение Гутенберга - не вариант. В этом случае разработчики WordPress рекомендуют установить плагин «Classic Editor».

После установки и активации плагина, нужно зайти на страницу настроек: Настройки > Написание и выбрать какой редактор будет использоваться по умолчанию, а также дать/запретить возможность выбора редактора пользователям.

Если оставить выбор редактора, то в таблице записей мы увидим следующие ссылки:

Коротко о возможностях плагина:

  • Администраторы могут выбрать редактор по умолчанию для всех пользователей.
  • Администраторы могут разрешить пользователям изменять свой редактор по умолчанию.
  • Когда редактор разрешен, пользователи могут выбрать, какой редактор использовать для каждой записи.
  • Каждая запись открывается в последнем использованном редакторе, независимо от того, кто его редактировал последним (нужно для сохранения совместимости при редактировании).

Принцип работы плагина основан на хуке use_block_editor_for_post_type.

18 комментариев
Полезные - 2 Все
    Войти