WordPress Gutenberg: этот блок содержит неожиданный или недействительный контент - PullRequest
0 голосов
/ 19 декабря 2018

Я создаю очень простой текстовый блок.Блок работает нормально, когда я добавляю это в первый раз.Если я обновлю страницу и попытаюсь отредактировать блок, он покажет мне сообщение «Этот блок содержит неожиданное или недействительное содержимое».Я пытался отключить проверку htmlvalidation, но это не помогает.Кроме того, после того, как я нажму на разрешение: текущий блок и после блока преобразования содержат тот же код.

http://prntscr.com/lwv18bhttp://prntscr.com/lwv1e1

Это мой код файла index.js

<code><pre>
/**
 * Block dependencies
 */
import icon from './icon';
import './style.css';

/**
 * Internal block libraries
 */
const { __ } = wp.i18n;
const { registerBlockType } = wp.blocks;
const { RichText } = wp.editor;




/**
 * Register block
 */
export default registerBlockType(
    'jsforwpblocks/richtext',
    {
        title: __('Bizbike Small Description', 'jsforwpblocks'),
        description: __('Default title', 'jsforwpblocks'),
        category: 'common',
        icon: 'text',
        keywords: [
            __('Text', 'jsforwpblocks'),
            __('Call to Action', 'jsforwpblocks'),
            __('Message', 'jsforwpblocks'),
        ],
        attributes: {
            message: {
                type: 'array',
                source: 'children',
                selector: '.message-body',
            }
        },
        supports: {
            // html: false,
            className: false,
            customClassName: false,
            html: false,
            htmlValidation: false,
        },
        edit: props => {
            const { attributes: { message }, className, setAttributes } = props;
            const onChangeMessage = message => { setAttributes({ message }) };
            return (
                <div id="small-text" className={className}>
                    <RichText
                        tagName="div"
                        multiline="p"
                        placeholder={__('Place the title', 'jsforwpblocks')}
                        onChange={onChangeMessage}
                        value={message}
                    />
                </div>
            );
        },
        save: props => {
            const { attributes: { message } } = props;
            return (
                <div>
                    <div class="commute text-center">
                        {message}
                    </div>
                </div>
            );
        },
    },
);

Ответы [ 2 ]

0 голосов
/ 01 августа 2019

Для диагностики этих ошибок откройте консоль браузера ( cmd + opt + i в Chrome на Mac, затем выберите вкладку Консоль) и найдите a «Ошибка проверки блока» , которая должна выглядеть примерно так:

blocks.js? Ver = 6.2.5: 8545 Проверка блока: сбой проверки блока для avorg/block-rss

({имя: «avorg / block-rss», заголовок: «RSS-ссылка», значок: {…}, категория: «виджеты», атрибуты: {…},…}).

Содержимое, сгенерированное функцией save:

<div class="wp-block-avorg-block-rss"><a href="http://google.com" target="_blank"><svg aria-hidden="true" role="img" focusable="false" class="dashicon dashicons-rss" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M14.92 18H18C18 9.32 10.82 2.25 2 2.25v3.02c7.12 0 12.92 5.71 12.92 12.73zm-5.44 0h3.08C12.56 12.27 7.82 7.6 2 7.6v3.02c2 0 3.87.77 5.29 2.16C8.7 14.17 9.48 16.03 9.48 18zm-5.35-.02c1.17 0 2.13-.93 2.13-2.09 0-1.15-.96-2.09-2.13-2.09-1.18 0-2.13.94-2.13 2.09 0 1.16.95 2.09 2.13 2.09z"></path></svg></a></div>

Содержимое, полученное из тела сообщения:

<div class="wp-block-avorg-block-rss"><a href="http://google.com" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" role="img" focusable="false" class="dashicon dashicons-rss" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M14.92 18H18C18 9.32 10.82 2.25 2 2.25v3.02c7.12 0 12.92 5.71 12.92 12.73zm-5.44 0h3.08C12.56 12.27 7.82 7.6 2 7.6v3.02c2 0 3.87.77 5.29 2.16C8.7 14.17 9.48 16.03 9.48 18zm-5.35-.02c1.17 0 2.13-.93 2.13-2.09 0-1.15-.96-2.09-2.13-2.09-1.18 0-2.13.94-2.13 2.09 0 1.16.95 2.09 2.13 2.09z"></path></svg></a></div>

Ошибка возникает из-за того, что извлеченный HTML и HTML, сгенерированный функцией save, не совпадают.Это может быть вызвано тем, что WordPress внедряет свойство (rel на снимке экрана выше) или когда определение блока изменилось с момента его использования.

Для решения проблемы вам может потребоваться выполнить одно из следующих действий:следующие вещи:

  1. Нажмите Разрешить в интерфейсе редактора, чтобы обновить экземпляр блока в соответствии с измененным определением блока.
  2. Если вы построили блок,вам может понадобиться отредактировать функцию save так, чтобы возвращаемый HTML-код был идентичен HTML-файлу, который в итоге сохраняется в базе данных.

В моем случае я должен был убедиться, что мой *Функция 1044 * включила rel="noopener noreferrer" в сгенерированный тег <a>, чтобы внедрение этого свойства в WordPress не приводило к несоответствию между HTML-кодом экземпляра блока и HTML-кодом, генерируемым моей save функцией.

0 голосов
/ 20 декабря 2018

Вы получаете ошибку, потому что ваши узлы HTML функции редактирования не совпадают с узлами HTML функции сохранения.

on edit у вас есть функция -

<div id="small-text" className={className}>
  <div>
    <p></p>
  </div>
</div>

on save функция у вас есть одна дополнительная div -

<div>
  <div class="commute text-center">
    <div>
      <p></p>
    </div>
  </div>
</div>
...