WordPress: встраивайте код с помощью настраиваемого блока Гутенберга

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

Мне было интересно, как лучше всего добавить HTML внутри блока так же, как вы делаете это с пользовательским блоком HTML. Есть ли элемент Гутенберга, который я пропустил?

Я пробовал подход

attributes:{
        embed: {
            type: 'string',
            default: null,
        },
        ....
        }

Затем я создал RichText на edit()

   let {  embed, ..... } = attributes;

<label>Embed HTML code here</label>
                    <RichText
                        tagName="div"
                        className="rich-text-holder"
                        placeholder= "Add the HTML"
                        value={ embed }
                        onChange={ ( embed ) => setAttributes( { embed } ) }
                    />

и, наконец, снова при сохранении ()

let { embed, .... } = attributes;

        function createMarkup() {
            return {__html: { embed } };
          }

 return().....
                    { embed &&
                    //<RawHTML className="listing-embed" >{ embed }</RawHTML>
                    <div dangerouslySetInnerHTML={ createMarkup() } />
                    }
....

Моя первая проблема в том, что атрибут, например, сохраняется как &lt;iframe src="https://www.w3schools.com">&lt;/iframe>. Вторая проблема заключается в том, что во внешнем интерфейсе я вижу только пустой div.

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

У вас есть лучший подход или вы знаете, что не так с моим кодом?


person Giannis Dallas    schedule 20.04.2019    source источник


Ответы (1)


Вы можете увидеть, как это делает блок Custom HTML, в репозиторий на github для Gutenberg.

Моя первая проблема заключается в том, что атрибут сохраняется, например, как ‹iframe src =" https://www.w3schools.com "> ‹/iframe>.

Предположительно это потому, что вы используете RichText. Не могли бы вы вместо этого использовать TextareaControl и, возможно, это не ускользнет от содержания?

Вторая проблема заключается в том, что во внешнем интерфейсе я вижу только пустой div.

Я полагаю, это потому, что HTML недействителен

person Simon    schedule 23.04.2019
comment
спасибо, Саймон, я использовал элемент PlainText, как и блок Custom HTML, и он сработал - person Giannis Dallas; 25.04.2019