Différence entre register_block_type et wp.blocks.registerBlockType

Sep 16 2020

Je crée un plugin qui est censé ajouter des blocs personnalisés à Gutenberg. J'ai enregistré et construit tous mes blocs en utilisant la fonction JavaScript de WordPress wp.blocks.registerBlockType(). Cela fonctionne exactement comme je m'y attendais, mais j'ai récemment découvert que WordPress avait également une fonction PHP appelée register_block_type().

La documentation dit register_block_type()"enregistre un type de bloc" .. Il utilise la WP_Block_Type_Registryclasse, mais je ne comprends pas vraiment ce que fait la classe.

N'importe qui pourrait m'aider à comprendre ce que register_block_type()fait exactement et quelle est la différence wp.blocks.registerBlockType()?

Merci pour ton aide!

Réponses

TomJNowell Sep 16 2020 at 20:46

La documentation dit register_block_type () "enregistre un type de bloc".

Oui, il fait le même travail mais en PHP plutôt qu'en javascript.

register_block_typepeut également être utilisé pour charger des blocs JS. Vous pouvez enregistrer un bloc et déclarer les fichiers CSS / JS / etc à charger.

Par exemple, consultez cet extrait de code publié dans les commentaires de la page de documentation officielle:

    register_block_type( 'mcqac/related-quiz', array(
        'editor_script' => 'mcqac-related-quiz-block-script',
        'editor_style'  => 'mcqac-related-quiz-block-editor-style',
        'style'         => 'mcqac-related-quiz-block-frontend-style',
    ) );

Vous pouvez également fournir un rappel de rendu et rendre le côté serveur de bloc en PHP.

Il utilise la classe WP_Block_Type_Registry, mais je ne comprends pas vraiment ce que fait la classe.

Pas tout à fait, il utilise WP_Block_Type. Il doit stocker ces données quelque part, plutôt que de les stocker sous forme de tableau sans définition, il les stocke en tant qu'objet structuré.

Cet objet fournit des méthodes d'assistance pour traiter les blocs de ce type, ainsi que des méthodes d'assistance pour le rendu des blocs de ce type si vous passez les attributs donnés. Bien que cela ne fonctionne que pour les blocs de rendu PHP dynamiques.

WP_Block_Type_Registryest simplement le type de classe de l'objet qui contient tous les types de bloc. Une structure similaire existe dans JS.

Des types de classes similaires existent pour chaque type d'objet majeur dans WordPress, par exemple WP_Term WP_Theme, ou WP_Post_Type. Comme avec la plupart des classes de WordPress, il ne s'agit pas de ce qu'elles font, mais de ce qu'elles sont / contiennent. La plupart des objets de base WP que vous traiterez sont des conteneurs de données d'une certaine forme avec une poignée de méthodes d'assistance, ou ce sont des objets de requête tels que WP_Query.

N'importe qui pourrait m'aider à comprendre ce que fait exactement register_block_type () et quelle est la différence avec wp.blocks.registerBlockType ()?

L'un est PHP, l'autre est JS, ils sont destinés à faire la même chose, enregistrer un bloc. C'est juste que parfois vous avez besoin de rendre les choses côté serveur, donc un moyen d'enregistrer des choses en PHP est souhaitable.