Dica rápida: metadados e edição em linha
Se você tiver uma meta box personalizada ou estiver trabalhando com metadados personalizados no nível de postagem, poderá encontrar um problema com a exclusão acidental de dados ao salvá-los na tela de edição em massa.
A configuração do problema é algo assim:
- você tem uma coleção de postagens que precisam ser alteradas,
- você carrega todas as postagens na tela de edição em massa (como mostrado acima),
- você aplica uma mudança.
Quando isso acontece, a alteração ocorre, mas apaga todos os metadados de postagem personalizados que você possa ter.
Esta é apenas uma pequena amostra de código da aparência do método save para seus metadados personalizados (ou seja, estou deixando de fora várias cláusulas de guarda):
<?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 );
}
O problema com isso é que não há verificação de que isso esteja vindo da tela de edição em massa. E por causa disso, os metadados podem ser completamente excluídos.
Para lidar com isso, precisamos verificar se a serialização está vindo da tela Bulk Edit. Dessa forma, podemos retornar mais cedo e impedir que o código seja executado. Em sua forma mais simples, você pode fazer algo assim :
<?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 );
}
Observe que eu não recomendo usar isso literalmente para casos universais ou para uso universal, pois é agressivo. Em vez disso, acho que vale a pena ler este artigo do Codex para obter mais informações sobre como a edição em linha funciona tanto no lado do servidor quanto no lado do cliente.
O objetivo da postagem é mostrar como os metadados personalizados podem ser excluídos involuntariamente e estabelecer as bases básicas de como você pode evitá-lo.