sanitize_text_field() vs esc_html(): sanitizar na entrada, escapar na saída
Diferença prática entre limpar dados antes de salvar e escapar dados antes de exibir no HTML.
Causa
Confundir as duas funções — ou usar apenas uma delas — é uma das causas mais comuns de XSS e de perda de formatação em campos do WordPress.
Como resolver
Use funções sanitize_* ao processar a entrada do usuário (antes de salvar no banco) e funções esc_* ao montar a saída em HTML (no momento de exibir), sem pular nenhuma das duas etapas.
PHP
// Ao salvar (entrada)
$titulo = sanitize_text_field( wp_unslash( $_POST['titulo'] ?? '' ) );
update_post_meta( $post_id, 'titulo_personalizado', $titulo );
// Ao exibir (saída)
echo '<h2>' . esc_html( get_post_meta( $post_id, 'titulo_personalizado', true ) ) . '</h2>';