Eu li o WordPress profissional e ele diz:
esc_html
A função é usada para limpar dados que contêm HTML. Esta função codifica caracteres especiais em suas entidades HTML
esc_attr
A função é usada para escape de atributos HTML
esc_url
. Esta função deve ser usada para limpar a URL quanto a caracteres ilegais. Mesmo que o href seja tecnicamente um atributo HTML
Qual a diferença entre estes?
Se eu tiver
<script>alert('hello world!');</script>this is some content
Todos < >
seriam convertidos para < >
? O URL será algo parecido %xxx
?
fonte