Suggerimento rapido: metadati e modifica in linea
Se si dispone di una meta box personalizzata o si lavora con metadati personalizzati a livello di post, è possibile che si verifichi un problema con l’eliminazione accidentale dei dati durante il salvataggio dalla schermata Modifica in blocco.
L’impostazione per il problema è qualcosa del genere:
- hai una raccolta di post che devono essere modificati,
- carichi tutti i post nella schermata di modifica collettiva (come mostrato sopra),
- applichi una modifica.
Una volta che ciò accade, la modifica si verifica, ma cancella tutti i metadati dei post personalizzati che potresti avere.
Questo è solo un piccolo esempio di codice di come appare il metodo di salvataggio per i tuoi metadati personalizzati (ovvero, sto tralasciando una serie di clausole di guardia):
<?php
/**
* Save the options in the meta box.
*
* @since 1.0.0
*
* @param int $post_id The ID of the current post
*/
public function save( $post_id) {
// Note: Guard clauses removed for readability.
// Assume $metadata is set earlier in this function.
update_post_meta( $post_id, 'acme-custom-meta-data', $metadata );
}
Il problema con questo è che non c’è alcun controllo che provenga dalla schermata Modifica collettiva . E per questo motivo, i metadati possono essere completamente eliminati.
Per gestirlo, dobbiamo verificare se la serializzazione proviene dalla schermata Modifica in blocco. In questo modo, possiamo tornare in anticipo e impedire l’esecuzione del codice. Nella sua forma più semplice, puoi fare qualcosa del genere :
<?php
/**
* Save the options in the meta box. Ignore the action if it's coming from the
* Bulk Edit screen.
*
* @since 1.0.0
*
* @param int $post_id The ID of the current post
*/
public function save( $post_id) {
// Note: Guard clauses removed for readability.
// Assume $metadata is set earlier in this function.
if (isset( $_POST['_inline_edit'])) {
return;
}
update_post_meta( $post_id, 'acme-custom-meta-data', $metadata );
}
Nota che non consiglio di usare questo testualmente per casi universali o per uso universale poiché è aggressivo. Invece, penso che valga la pena leggere questo articolo del Codex per ottenere maggiori informazioni su come funziona la modifica in linea sia sul lato server che sul lato client.
Lo scopo del post è mostrare come i metadati personalizzati possono essere eliminati involontariamente e gettare le basi per prevenirli.