Как включить блоковый редактор (Гутенберг) для существующего типа записи через functions.php

Вопрос или проблема

У меня возникли трудности с тем, как включить блоковый редактор для существующего типа записи в теме. Я бы предпочел редактировать это через functions.php в моей дочерней теме, а не редактировать саму тему.

Это код, который я придумал в ходе моего исследования, но, похоже, он не работает с использованием этого фильтра register_post_type_args и “show_in_rest”. Код ниже:

function ux_portfolio_block_editor( $args, $post_type ) {
    if ( $post_type == "featured_item" ) {
        $args['rewrite'] = array(
            'show_in_rest' => true,
            'supports' => array('editor')
        );
    }
    return $args;
}
add_filter( 'register_post_type_args', 'ux_portfolio_block_editor', 20, 2 );

Любая помощь будет принята с благодарностью. Спасибо

Включение редактора Гутенберг (блочного редактора) для конкретного типа записи требует выполнения этих критериев:

  1. Тип записи должен быть включен в REST API, так как Гутенберг использует REST API. Для этого нужно установить параметр show_in_rest в true при регистрации типа записи — см. register_post_type().

  2. Тип записи должен поддерживать редактор, иначе редактор не появится на экране редактирования записи. Для этого нужно добавить editor в параметр supports (который является массивом) при регистрации типа записи.

И, как вы уже поняли, вы можете переопределять (добавлять/редактировать/удалять) параметры типа записи через register_post_type_args hook. Однако вы переопределяете неправильный параметр: rewrite, который на самом деле не имеет параметра show_in_rest или supports.

И я уже указал правильные параметры, которые должны быть переопределены/установлены, поэтому вот рабочий пример на основе вашего кода — обратите внимание, что лучше использовать строгое сравнение (например, === для проверки равенства) и в выражении (или условном операторе) рекомендуется ставить переменную справа (например, 'value' === $my_var, а не $my_var === 'value'):

function ux_portfolio_block_editor( $args, $post_type ) {
    if ( 'featured_item' === $post_type ) {
        // 1. Включить в REST API.
        $args['show_in_rest'] = true;

        // 2. Добавить поддержку редактора.
        if ( empty( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
            $args['supports'] = [ 'editor' ];
        } elseif ( ! in_array( 'editor', $args['supports'] ) ) {
            $args['supports'][] = 'editor';
        }
    }
    return $args;
}

Как насчет (пользовательских) таксономий?

Что ж, это похоже на работу с типами записей, за исключением того, что:

  1. Используйте register_taxonomy_args hook для переопределения параметров таксономии.

  2. Таксономии не используют параметр supports, поэтому, чтобы включить таксономию (селектор) в блочном редакторе (на экране редактирования записи), нужно только установить параметр show_in_rest в true при регистрации таксономии (см. register_taxonomy()) или при переопределении ее параметров.

Итак, вот пример для таксономии с ярлыком block_cat:

function ux_portfolio_block_cat_editor( $args, $taxonomy ) {
    if ( 'block_cat' === $taxonomy ) {
        $args['show_in_rest'] = true;
    }
    return $args;
}
add_filter( 'register_taxonomy_args', 'ux_portfolio_block_cat_editor', 20, 2 );

function bbpc_editor_switcher_settings( $args, $post_type ) {
$settings = get_option( ‘bbp_core_settings’ );

    // Проверьте, выбран ли блочный редактор и является ли тип записи либо форумом, темой или ответом
    if ( isset( $settings['choose_default_editor'] ) && $settings['choose_default_editor'] == 'block' ) {

        $applicable_post_types = ['forum', 'topic', 'reply'];

        // Включить Гутенберг (Блочный редактор) для указанных типов записей
        if ( in_array( $post_type, $applicable_post_types, true ) ) {
            // 1. Включить в REST API для этих типов записей
            $args['show_in_rest'] = true;

            // 2. Убедитесь, что поддержка редактора включена
            if ( empty( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
                $args['supports'] = ['editor'];
            } elseif ( ! in_array( 'editor', $args['supports'] ) ) {
                $args['supports'][] = 'editor';
            }
        }
    }
    return $args;

Публикация не удалась. Не найден маршрут, соответствующий URL и методу запроса.

Ответ или решение

Теория: Включение блокового редактора (Гутенберг) для существующего типа записи через functions.php

Когда дело доходит до использования блокового редактора WordPress, также известного как редактор Гутенберг, для существующих типов записей, важно понять, какие настройки и параметры необходимо изменить. Во-первых, блоковый редактор использует REST API для взаимодействия, поэтому пост тип должен быть доступен через REST API. Это достигается путем установки параметра show_in_rest на true, когда вы регистрируете тип записи. Во-вторых, запись должна поддерживать редактор, чтобы он отображался на экране редактирования. Это достигается добавлением editor в параметр supports при регистрации типа записи.

Пример: Код для включения блокового редактора

Рассмотрим пример, где тип записи с именем featured_item должен поддерживать блоковый редактор. Ниже приведен работающий пример кода, который может быть добавлен в файл functions.php вашей дочерней темы:

function ux_portfolio_block_editor( $args, $post_type ) {
    if ( 'featured_item' === $post_type ) {
        // 1. Включаем REST API.
        $args['show_in_rest'] = true;

        // 2. Добавляем поддержку редактора.
        if ( empty( $args['supports'] ) || ! is_array( $args['supports'] ) ) {
            $args['supports'] = [ 'editor' ];
        } elseif ( ! in_array( 'editor', $args['supports'] ) ) {
            $args['supports'][] = 'editor';
        }
    }
    return $args;
}
add_filter( 'register_post_type_args', 'ux_portfolio_block_editor', 20, 2 );

Применение: Пошаговая реализация

  1. Подключение REST API. Первым и важнейшим шагом является установка параметра show_in_rest в true. Это позволяет блоковому редактору взаимодействовать с вашим типом записи через REST API. Без этой настройки редактор работать не будет, поскольку он напрямую зависит от REST API для выполнения многих своих функций, включая сохранение и получение данных.

  2. Добавление поддержки редактора. Второй шаг заключается в проверке, поддерживает ли ваш тип записи редактор. Если в аргументах supports отсутствует параметр editor, необходимо его добавить. Это обеспечит наличие редактора на экране редактирования записи.

  3. Использование фильтров WordPress. Мы применяем фильтр register_post_type_args для изменения параметров уже зарегистрированного типа записи. Это фильтр позволяет добавлять, изменять или удалять параметры, не затрагивая основного кода темы.

  4. Размещение кода. Добавьте приведенный выше код в файл functions.php вашей дочерней темы, чтобы убедиться, что изменения не будут потеряны при обновлении основной темы.

Дополнительные комментарии

  • Обратите внимание, что рекомендуется использовать строгие сравнения (например, ===) для проверки условий. Это помогает избежать потенциальных ошибок, связанных с неявным приведением типов в PHP.

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

  • Если вы получаете сообщение об ошибке вроде "Publishing failed. No route was found matching the URL and request method.", это может быть связано с неправильной настройкой REST API. Убедитесь, что show_in_rest действительно установлен в true и проверьте конфигурацию маршрутов API.

Сама по себе эта настройка достаточно проста, но требует понимания внутренних механизмов WordPress и того, как блоковый редактор взаимодействует с типами записей и REST API. При корректной реализации это обеспечивает более современный и гибкий пользовательский опыт редактирования контента в WordPress.

Оцените материал
Добавить комментарий

Капча загружается...