WordPress

Sprawdzanie poprawności bloków — wartości domyślne atrybutów i zapytanie nie działają razem

  • 9 czerwca, 2023
  • 3 min read
Sprawdzanie poprawności bloków — wartości domyślne atrybutów i zapytanie nie działają razem


W mojej wtyczce blokowej mam plik atrybutów (index.js), aw nim mam plik MediaLinki atrybut gdzie i próbuję użyć wartości domyślnych wraz z procesem zapytania …

My index.js file

import { registerBlockType } from '@wordpress/blocks';
import { __ } from '@wordpress/i18n';
import Edit from './edit';
import Save from './save';

registerBlockType( 'mediagallery/item', {
    title: __( 'Media Gallery Block Item', 'mg-block-item' ),
    description: __(
        'A sub block associated to the Media Gallery parent block',
        'mg-block'
    ),
    category: 'text',
    icon: {
        src: 'controls-play',
        foreground: '#6a5acd',
    },
    parent: [ 'mg-block/mediagallery' ],
    supports: {
        reusable: false,
        html: false,
    },
    attributes: {
        mediaLinks: {
            type: 'array',
            source: 'query',
            selector: '.wp-block-mediagallery-item-media-links ul li',
            default: [
                {
                    link: '
                    icon: 'media-video',
                },
                {
                    link: '
                    icon: 'media-video',
                },
                {
                    link: '
                    icon: 'media-video',
                },
            ],
            query: {
                icon: {
                    source: 'attribute',
                    attribute: 'data-icon',
                },
                link: {
                    source: 'attribute',
                    selector: 'a',
                    attribute: 'href',
                },
            },
        },
    },
    edit: Edit,
    save: Save,
} );

… Ale mimo że powyższe działa początkowo, kiedy odświeżam moją stronę edycji, WordPress nie widzi dopasowania między wpisem a zapisem i zgłasza następujący błąd…


Content generated by `save` function:

<div class="wp-block-mediagallery-item"><button class="vid-img"><img src=" alt="" class="wp-image-409"/></button><h2 class="vid-name">Joe Right</h2><div class="vid-title"><p>Web Dev</p></div><div class="vid-content"><p>Works out of Paris</p></div><div class="wp-block-mediagallery-item-media-links"><ul><li><a href=" href=" href="


Content retrieved from post body:

<div class="wp-block-mediagallery-item"><button class="vid-img"><img src=" alt="" class="wp-image-409"/></button><h2 class="vid-name">Joe Right</h2><div class="vid-title"><p>Web Dev</p></div><div class="vid-content"><p>Works out of Paris</p></div><div class="wp-block-mediagallery-item-media-links"><ul><li><a href=" class="dashicon dashicons dashicons-media-video"></span></a></li><li><a href=" data-icon="media-video"><span class="dashicon dashicons dashicons-media-video"></span></a></li><li><a href=" data-icon="media-video"><span class="dashicon dashicons dashicons-media-video"></span></a></li></ul></div></div>

Uwaga w powyższym oświadczeniu o błędzie, ratować nie widzi <span class="dashicon dashicons dashicons-media-video"></span> i nie widzi data-icon="media-video"

Dlaczego tak miałoby być?

Warto przeczytać!  WooCommerce — lista rozwijana odmian z niestandardowym atrybutem

my save.js file

import { useBlockProps} from '@wordpress/block-editor';
import { Icon } from '@wordpress/components';

export default function Save( { attributes } ) {
    const { mediaLinks } = attributes;
    const blockProps = useBlockProps.save({});

    return (
        <div { ...blockProps }>

          /* ...other stuff here like name, title, and content... */
    
            { mediaLinks.length > 0 && (
                <div className="wp-block-mediagallery-item-media-links">
                    <ul>
                        { mediaLinks.map( ( item, index ) => {
                            return (
                                <li key={ index }>
                                    <a
                                        href={ item.link }
                                        data-icon={ item.icon }
                                    >
                                        <Icon icon={ item.icon } />
                                    </a>
                                </li>
                            );
                        } ) }
                    </ul>
                </div>
            ) }
        </div>
    );
}

Dziękujemy za wszelkie wskazówki dotyczące prawidłowego korzystania z komponentu ikony i domyślnych atrybutów w celu zapisywania.


Źródło