Блок Гутенберга с данными JSON - PullRequest
0 голосов
/ 07 марта 2020

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

const { registerBlockType } = wp.blocks
const {
    RichText,
    InspectorControls,
    MediaUpload,
    InnerBlocks
} = wp.blockEditor
const {
    PanelBody,
    IconButton,
} = wp.components
const { select } = wp.data

registerBlockType('exampletheme/article-block', {
    title: 'Artikel Block',
    description: 'xxxxxxxxxx',
    icon: 'format-image',
    category: 'example-blocks',
    attributes: {
        image: {
            type: 'string',
            default: null
        },
        description: {
            type: 'string',
            source: 'html',
            selector: 'head p'
        }
    },
    edit: ({ attributes, setAttributes }) => {
        const {
            image,
            description
        } = attributes

        function updateImage(value) {
            setAttributes({ image: value })
        }
        function updateDescription(value) {
            setAttributes({ description: value })
        }
        return ([
            <InspectorControls style={{ marginBottom: '40px' }} >
                <PanelBody title="Blockeinstellungen">
                    <p><strong>Bildeinstellungen</strong></p>
                    <MediaUpload
                        onSelect={updateImage}
                        type="image"
                        value={image}
                        render={({ open }) => (
                            <IconButton
                                onClick={open}
                                icon="upload"
                                className="editor-media-placeholder__button is-button is-default is-large"
                            >
                                Bild
                                </IconButton>
                        )}
                    />
                    <br />
                </PanelBody>
            </InspectorControls>,
            <article>
                {image &&
                    <img src={image.sizes.large.url} alt={image.alt} title={image.title} />
                }
                <RichText
                    key="editable"
                    tagName="p"
                    placeholder="Kurzbeschreibung des Artikels"
                    value={description}
                    onChange={updateDescription}
                />
                <main>
                    <InnerBlocks />
                </main>
            </article>
        ])
    },
    save: ({ attributes }) => {
        const {
            image,
            description
        } = attributes
        function json() {
            const headline = wp.data.select('core/editor').getCurrentPost().title
            const imgUrl = image ? image.sizes.full.url : ''
            const datePub = wp.data.select('core/editor').getCurrentPostAttribute('date')
            const authorName = wp.data.select('core').getCurrentUser.name
            return `
                {myJsonString}
            `
        }
        return (
            <article>
                <head>
                    {image &&
                        <picture>
                            <source media="(max-width: 150px)" srcset={image.sizes.thumbnail.url} />
                            <source media="(max-width: 300px)" srcset={image.sizes.medium.url} />
                            <source media="(max-width: 1024px)" srcset={image.sizes.large.url} /> */}
                        <img src={image.url} alt={image.alt} title={image.title} />
                        </picture>
                    }
                    <h1>{wp.data.select('core/editor').getCurrentPost().title}</h1>
                    <RichText.Content
                        tagName="p"
                        value={description}
                    />
                </head>
                <main>
                    <InnerBlocks.Content />
                </main>
                {/* <script type="application/ld+json">{json()}</script> */}
            </article >
        )
    }
})

В консоли я получаю следующую ошибку. Для удобства чтения я выключил json, но у него та же проблема. Я не могу понять, почему это так отличается.

Content generated by `save` function:

<article class="wp-block-myrmodtheme-article-block"><head><h1></h1><p></p></head><main></main></article>

Content retrieved from post body:

<article class="wp-block-myrmodtheme-article-block"><head><h1>test</h1><p>asdf</p></head><main></main></article>

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

Если бы вы указали мне правильное направление, это было бы здорово Я пытаюсь заставить это работать весь день.

С уважением

1 Ответ

0 голосов
/ 12 марта 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...