Salvando metadados customizados com segurança no hook save_post
Como persistir campos personalizados ao salvar um post sem disparar loops ou gravar dados não confiáveis.
Causa
Usar save_post sem checar autosave, revisões e nonce faz o callback rodar múltiplas vezes por clique em salvar e permite gravar dados de origens não verificadas.
Como resolver
Verifique DOING_AUTOSAVE e wp_is_post_revision(), valide o nonce com wp_verify_nonce() e sanitize cada valor antes de chamar update_post_meta().
PHP
add_action( 'save_post', function ( $post_id ) {
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
return;
}
if ( ! isset( $_POST['meu_nonce'] ) || ! wp_verify_nonce( $_POST['meu_nonce'], 'salvar_meta' ) ) {
return;
}
if ( ! current_user_can( 'edit_post', $post_id ) ) {
return;
}
if ( isset( $_POST['meu_campo'] ) ) {
update_post_meta( $post_id, 'meu_campo', sanitize_text_field( $_POST['meu_campo'] ) );
}
} );