Quando registri e memorizzi gli attributi nell’editor di blocchi di WordPress (Gutenberg) hai la possibilità di salvarli come meta meta, invece dei soliti attributi di blocco.
Usando questo metodo, potresti avere un’impostazione nel tuo blocco che può controllare qualcosa a livello di post o sul modello.
Una nota importante sul rendering degli attributi dei meta post
Non puoi eseguire il rendering dei meta attributi dei post utilizzando un metodo di salvataggio JavaScript. Il team di Gutenberg ha deciso di impedirlo, perché i blocchi che rendono i meta campi dei post possono essere facilmente interrotti a causa della modifica dei meta post in altre parti del post.
In questa guida espanderemo ciò che abbiamo già creato nella nostra guida ai plugin di WordPress Gutenberg e anche nella guida ai blocchi dinamici.
Prerequisiti
- Familiarizzare con la creazione di plugin per WordPress Gutenberg
- Familiarizzare con i blocchi dinamici e il rendering lato server
Registrazione del Post Meta in PHP
Prima di poter utilizzare un meta campo post in JavaScript, dobbiamo assicurarci di averlo registrato in PHP utilizzando register_metae che l’ show_in_restargomento sia stato impostato su true.
Seguendo la guida al blocco dinamico, apri il file PHP radice del plugin (in questo caso wholesome-plugin.php) e aggiungi il seguente codice in fondo a quel file dopo tutte le altre funzioni:
function wholesomecode_wholesome_plugin_register_post_meta() {
register_meta(
'post',
'_wholesomecode_wholesome_plugin_block_text',
[
'auth_callback' => '__return_true',
'default' => __( 'Wholesome Plugin – hello from the editor!', 'wholesome-plugin' ),
'show_in_rest' => true,
'single' => true,
'type' => 'string',
]
);
}
add_action( 'init', 'wholesomecode_wholesome_plugin_register_post_meta' );
Questo codice registra un meta campo chiamato _wholesomecode_wholesome_plugin_block_textper il posttipo di post. Garantisce inoltre che l’API REST possa accedere a questo meta campo con il show_in_restvalore impostato su true.
Stiamo anche passando la funzione __return_trueall’argomento auth_callbackper assicurarci di avere i permessi per accedere a questo parametro. Se volessimo una maggiore sicurezza per questo parametro, lo modificheremmo in una funzione personalizzata che controlla un determinato ruolo utente.
Registrazione degli attributi Post Meta in JavaScript
Ancora una volta, seguendo la guida precedente, apri /src/index.jse sostituisci attributescon il seguente:
attributes: {
blockText: {
meta: '_wholesomecode_wholesome_plugin_block_text',
source: 'meta',
},
},
Invece di indicare il tipo di attributo e assegnare un valore predefinito, definiamo invece la meta chiave da cui proverrà l’attributo data e indichiamo che sourcel’attributo è meta.
Come indicato nell’avviso all’inizio di questa guida, non sei in grado di accedere agli attributi del post meta field tramite il savemetodo JavaScript, quindi compila il plugin con npm starte vediamo come possiamo generare il meta.
Rendering del Post Meta
Poiché abbiamo salvato il nostro attributo come post meta, potremmo riprodurlo ovunque in WordPress utilizzando get_post_meta(a condizione che abbiamo il $post_id):
get_post_meta( $post_id, '_wholesomecode_wholesome_plugin_block_text', true );
Continuando la guida al blocco dinamico, vediamo come possiamo accedere a questo attributo lato server in PHP.
Il meta non è disponibile tramite il $attributesparametro di render_callback, poiché gli attributi post meta non trasmettono il loro valore a questo parametro, ma possiamo accedere $postall’oggetto globale per ottenere l’ID del post.
Con questo in mente, aggiorniamo il nostro register_block_typeper produrre il meta del post:
register_block_type(
'wholesomecode/wholesome-plugin',
array(
'editor_script' => 'wholesomecode-wholesome-plugin-block-editor',
'editor_style' => 'wholesomecode-wholesome-plugin-block-editor',
'render_callback' => function( $attributes, $content) {
global $post;
$block_text = get_post_meta( $post->ID, '_wholesomecode_wholesome_plugin_block_text', true );
return "<p class='wp-block-wholesomecode-wholesome-plugin'>$block_text</p>";
},
'style' => 'wholesomecode-wholesome-plugin-block',) );
Nota che non abbiamo più bisogno di registrare attributesqui, perché stiamo solo accedendo al post meta campo tramite la get_post_metafunzione.
Usando il blocco
Questo non è il miglior caso d’uso di questo tipo di meta, tuttavia quando utilizziamo il blocco, possiamo vedere che poiché stiamo memorizzando gli attributi come meta post, se aggiorniamo l’attributo in un blocco, aggiorna tutti i blocchi, come il post meta viene archiviato sul post, non sul singolo blocco:
Post Meta attributi in azione
- Dai un’occhiata alla creazione di blocchi figlio nidificati con il
InnerBlockscomponente - Sfrutta ulteriormente il meta post in Gutenberg creando Meta Box personalizzati in Gutenberg
- Dai un’occhiata all’utilizzo delle impostazioni per memorizzare i dati nella tabella delle opzioni in Gutenberg