it-swarm-es.com

¿Por qué necesito comprobar si wp_nonce_field () existe antes de usarlo?

realmente no entiendo por qué la verificación de si existe la función nonce antes de ejecutarlo ...

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

entiendo su compatibilidad hacia atrás ...

Observe también cómo está verificando que la función wp_nonce_field existe antes de intentar llamarla por compatibilidad con versiones anteriores

pero no se rompe de todos modos si en la publicación de vuelta compruebo

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

La respuesta es que no debe verificar si existe wp_nonce_field () antes de usarlo.

La recomendación de realizar la comprobación supone que desea ser compatible con las versiones de WordPress desde antes de que existiera la función. Si Rarst tiene razón en que se introdujo en la versión 2.0.4, NO debe admitir versiones anteriores, ya que todas son absolutamente inseguras y cualquiera que las use debe actualizar AHORA MISMO.

Por lo general, no debería tener que verificar la existencia de funciones dentro de WP, a diferencia de las funciones de los complementos que podrían no estar activadas.

¿Dónde viste ese comentario que citaste? Debe ser eliminado.

5
jerclarke

Si entiendo bien su pregunta, ¿pregunta por qué no hay necesidad de verificar si check_admin_referer () también está definido?

Por lo que veo en los documentos, esta función es mucho más antigua (desde WP 1.2.0) que wp_nonce_field () (desde WP 2.0.4). Asumiría que es mucho menos probable que encuentres una versión tan antigua que no tenga check_admin_referer ().

1
Rarst

Verifica la existencia de una función para evitar un error fatal y la aplicación posterior se detiene cuando su código se ejecuta en una versión de WordPress que no incluye la función que está intentando usar.

¿Esto asegura la compatibilidad hacia atrás? Absolutamente. Sin embargo, lo que es más importante, esta comprobación evita que su código cause que la aplicación se bloquee cuando se ejecuta su código:

El manejo de errores debe ser "elegante" en cualquier sistema, lo que significa que la aplicación debe saber cómo detectar sus propios errores y manejarlos de alguna manera apropiada con una interrupción mínima para los usuarios finales. Lea más en http://www.devshed.com/c/a/PHP/PHP-Application-Development-Part-Two/2/#wIxuV7yhLhBTU1UZ.99

Así, en tu código, podrías hacer lo siguiente:

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