Claro, el problema que tienes es que la función satitize_text_field está hecha para limpiar una sola cadena de texto y romper todas las posibles estructuras de datos que te intenten colar.
Como imagino que lo que pretendes con tu método save_setting() es que sea genérico y no tengas que pasarle el tipo de campo que esperas, vas a tener que hacer una validación inicial más básica y luego revisar tú cada caso específico:
if ( filter_input( INPUT_POST, "{$this->prefix}_setting" ) !== null ) {
check_admin_referer( 'aqui_va_tu_nonce' );
$new_settings = filter_input( INPUT_POST, "{$this->prefix}_setting", FILTER_FORCE_ARRAY );
}
Ahí estoy usando INPUT_POST, pero también permite INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER o INPUT_ENV.
https://www.php.net/manual/es/function.filter-input.php
El tercer parámetro y sucesivos de filter_input() son los filtros que quieres aplicarle, yo en el código uso FILTER_FORCE_ARRAY para garantizar que por lo menos lo que recibo sea un array, pero también puedes poner FILTER_DEFAULT o dejarlo en blanco para que no haga nada por defecto y hacer tú toda la validación (cuidadín)
Hola @camilo517
Usa $_GET
o $_POST
dependiendo del caso, pero normalmente seria $_POST
para las opciones de un plugin y luego puedes utilizar por ejemplo el filter_input
aparte del tipico wp_slash
tambien podrias aplicar a cada uno un sanitize_*
dependiendo del valor y asi seguro que no se cuela nada.
Un ejemplo:
if ( check_admin_referer( 'loquesea' ) ) {
$input = filter_input( INPUT_POST, 'Variable' );
if ( is_array( $input ) ) {
$input = map_deep( $input, 'sanitize_text_field' );
}
}
Usar filter_input
tiene dos ventajas frente al tipico isset
o empty
pasa el WPCS y aumenta la seguridad como por ejemplo se podria aplicar un filtro mas especifico para la variable.
Vaya! Nilo se me adelanto, pero el concepto es el mismo.
-
Esta respuesta fue modificada hace 5 años, 1 mes por
kallookoo.
Iniciador del debate
Camilo
(@camilo517)
Muchas gracias a los dos!
Ya lo he conseguido arreglar y el equipo de plugins acepto el plugin
Es un plugin muy útil que usaba de forma privada y lo quise publicar pero con ese fallo no me dejaban
Feliz año y gracias @kallookoo @nilovelez