it-swarm-pt.tech

Por que preciso verificar se wp_nonce_field () existe antes de usá-lo

eu realmente não entendo porque a verificação se a função nonce existe antes de executá-lo ...

if ( function_exists('wp_nonce_field') ) 
     wp_nonce_field('gmp_nonce_check');

eu entendo o seu para trás compatibilidade ...

Observe também como você está verificando se a função wp_nonce_field existe antes de tentar chamá-la para compatibilidade com versões anteriores

mas não vai quebrar de qualquer maneira se no post de volta eu verificar

if ( isset($_POST['submit']) ) {
     check_admin_referer('gmp_nonce_check');
1
Jiew Meng

A resposta é que você não deve verificar se wp_nonce_field () existe antes de usá-lo!

A recomendação para executar a verificação pressupõe que você deseja ser compatível com versões do WordPress antes que a função existisse. Se a Rarst estiver certa de que ela foi introduzida na versão 2.0.4, então você NÃO deveria estar dando suporte a versões anteriores, já que elas são absolutamente inseguras e qualquer pessoa que as utilize precisa fazer upgrade AGORA.

Normalmente, você não deve verificar a existência de funções dentro do WP, ao contrário das funções de plugins que podem não estar ativados.

Onde você viu aquele comentário que você citou? Deve ser removido.

5
jerclarke

Se eu entendi bem a sua pergunta - você pergunta por que não há necessidade de verificar se check_admin_referer () também está definido?

Tanto quanto eu vejo em docs esta função é muito mais antiga (desde queWP 1.2.0) do que wp_nonce_field () (desde que WP 2.0.4). Então eu suponho que você é muito menos provável encontrar versão antiga que não tenha check_admin_referer ().

1
Rarst

Você verifica a existência de uma função para evitar que um erro fatal e o aplicativo subsequente parem quando seu código é executado em uma versão do WordPress que não inclui a função que você está tentando usar.

Isso garante a compatibilidade com versões anteriores? Absolutamente. Mais importante, no entanto, essa verificação impede que seu código faça com que todo o aplicativo trave quando seu código é executado:

O tratamento de erros deve ser "gracioso" em qualquer sistema - o que significa que o aplicativo deve saber como detectar seus próprios erros e lidar com eles de maneira apropriada, com o mínimo de interrupção para os usuários finais. Leia mais em http://www.devshed.com/c/a/PHP/PHP-Application-Development-Part-Two/2/#wIxuV7yhLhBTU1UZ.99

Assim, no seu código, você poderia fazer o seguinte:

if ( function_exists('wp_nonce_field') ) {
 wp_nonce_field('gmp_nonce_check');
} else {
 //do nothing
 exit() ;
}
0
Daryl