Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • 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)

    Moderador kallookoo

    (@kallookoo)

    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 4 años, 3 meses 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

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • El debate ‘Sanitizar $REQUEST’ está cerrado a nuevas respuestas.