Пользовательские мета-блоки Гутенберга не сохраняют мета в пользовательский тип сообщения

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

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

Блок отображается правильно, но не сохраняет метаданные, функция updateBlockValue определенно вызывается.

Я использовал почти идентичный код для создания настраиваемых мета-блоков для страниц и сообщений. Этот метод просто не работает с пользовательскими типами сообщений?

это код, который я использую:

PHP

function wb_blocks() {

    wp_register_script(
        'wb-blocks-js',
        get_template_directory_uri() . '/scripts/block.js',
        array( 'wp-blocks', 'wp-editor', 'wp-element','wp-components' )
    );
    register_block_type( 'ray/homebox-link-url', array(
        'editor_script' => 'wb-blocks-js',
    ) );

}
add_action( 'init', 'wb_blocks' );
function wb_register_block_meta() {

    register_meta( 'post', 'homebox_link_url', array(
        'show_in_rest' => true,
        'single' => true,
        'type' => 'string',
    ) );

}

add_action( 'init', 'wb_register_block_meta' );

JS

registerBlockType( 'ray/homebox-link-url', {
title: 'Homebox Link',
icon: 'universal-access-alt',
category: 'layout',
attributes: {
    blockValue: {
        type: 'string',
        source: 'meta',
        meta: 'homebox_link_url',
    }
},

edit: function( props ) {
    var setAttributes = props.setAttributes;

    function updateBlockValue( blockValue ) {
        setAttributes({ blockValue });
    }

    return el(
       'div',
       { className: "homebox-link-url" },
        el( 'h5',{}, 'URL to link to:'),
        el (TextControl,
        {
            onChange: updateBlockValue,
            value: props.attributes. blockValue,
        })
    );
},

save: function( props ) {
     return null;
},
} );

person WheatBeak    schedule 01.03.2019    source источник


Ответы (1)


Ваш код, связанный с блоком, выглядит нормально.

Вероятно, проблема в настраиваемом типе сообщения. При регистрации вы должны убедиться, что он поддерживает настраиваемые поля:

register_post_type(
  'post-type',
  [
    // options...
    'supports' => [
      // ...
      'custom-fields',
    ],
  ]
);

Эти последние шаги гарантируют, что ваш настраиваемый тип сообщения предоставляет метасвойство из REST API, которое Гутенберг использует для просмотра / обновления данных.

(Взято из https://github.com/WordPress/gutenberg/issues/5622#issuecomment-375362438)

person Philipp Bammes    schedule 17.04.2019
comment
Не уверен, почему кто-то проголосовал против этого, потому что это именно то, в чем была моя проблема. Спасибо. - person WheatBeak; 02.05.2019
comment
@Philipp Bammes Спасибо, спасибо и трижды спасибо - это была моя проблема. Я не уверен, почему эта официальная документация ускользнула от меня, но вы только что сохранили мое рассудок. Этот ответ определенно НЕ должен быть отвергнут. - person codewithfeeling; 10.10.2019