Ajustes del selector de monedas de WooCommerce que no se guardan: max_input_vars
Cuando los ajustes del selector de monedas de WooCommerce no se guardan, el patrón suele ser el mismo: añades monedas o seleccionas países de GeoIP, pulsas Guardar cambios (Save changes), la página se recarga como si todo hubiera ido bien y parte de lo que introdujiste ha desaparecido. En la mayoría de los casos no fue FOX ni WordPress quien lo descartó. Lo hizo PHP, antes de que WordPress llegara a ver la solicitud, porque el formulario de ajustes envió más campos de los que permite el límite max_input_vars del servidor. A continuación verás cómo reconocerlo, cómo subir el límite y cuáles son las causas menos habituales cuando el límite no es el problema.
Por qué los ajustes desaparecen al guardar
Todas las pestañas de la página de ajustes de FOX (WooCommerce → Ajustes → Moneda) forman un único formulario HTML. Guardar cambios (Save changes) envía todas las pestañas en una sola solicitud, y cada campo del formulario es una variable:
- cada fila de moneda de la pestaña Divisas (Currencies) envía una docena de campos: código, tipo de cambio, interés, mínimo y máximo del tipo de cambio, símbolo, posición, decimales, separadores, descripción, bandera y la marca de moneda base;
- cada país seleccionado en las Reglas de GeoIP (GeoIP rules) es un campo independiente, así que seleccionar todo (Select all) en una moneda añade unos 250 de golpe;
- cada moneda seleccionada para una pasarela de pago en la pestaña Pagos (Payments) es otro campo más;
- las pestañas Opciones (Options), Avanzado (Advanced) y Lado (Side) suman sus propios ajustes.
El ajuste max_input_vars de PHP limita cuántas de esas variables puede llevar una solicitud; el valor por defecto es 1000. Cuando un formulario envía más, PHP conserva las primeras 1000 y descarta el resto sin avisar. FOX guarda entonces lo que recibió, y la mayoría de los campos que no llegaron se guardan vacíos o desactivados en lugar de quedar como estaban. Si no llega ninguno de los campos de GeoIP, las reglas de GeoIP se borran.
El formulario se envía en el orden de la página: Divisas (Currencies), Opciones (Options), Avanzado (Advanced), Lado (Side), Pagos (Payments) y, por último, GeoIP. El corte afecta primero al final del formulario, y cuantos más campos hay, más arriba sube el corte. De ahí salen los síntomas típicos, de más a menos frecuente:
- los países de GeoIP se conservan en las primeras monedas y se pierden en la tercera o la cuarta;
- se pierden las selecciones de Reglas de pagos (Payments rules);
- las opciones de las pestañas Lado (Side) y Avanzado (Advanced) se desactivan solas: Es múltiple permitido (Is multiple allowed) vuelve a No, o la pestaña Pagos (Payments) no aparece nunca después de activar Reglas de pagos (Payments rules), porque solo se muestra cuando la opción realmente se guardó;
- con unas 70 monedas o más, el corte llega a la propia tabla de monedas: las últimas filas desaparecen o pierden sus banderas, símbolos y descripciones.
Comprueba el límite en tu servidor
Abre WooCommerce → Estado. En la sección Entorno del servidor (Server environment), Variables de entrada máximas de PHP (PHP max input vars) muestra el valor actual. Compáralo con un cálculo aproximado de tu formulario: monedas × 13, más cada país de GeoIP seleccionado, más cada moneda seleccionada en las reglas de pagos, más unos 100 para todo lo demás. Diez monedas son solo unos 130 campos, pero cuatro de ellas con seleccionar todo (Select all) en las reglas de GeoIP suman unos 1000 más, y el formulario supera el límite por defecto justo en la pestaña de GeoIP.
Hay dos formas más de confirmarlo:
- El registro de errores de PHP, si el registro está activado, contiene una advertencia como Input variables exceeded 1000. To increase the limit change max_input_vars in php.ini. escrita en el momento en que guardaste.
- El valor almacenado difiere de lo que seleccionaste. Con WP-CLI,
wp option get woocs_is_multiple_alloweddevuelve1para Sí (Yes); un0después de guardar Sí (Yes) significa que el campo se cortó.
Sube max_input_vars
El ajuste pertenece a la configuración de PHP del sitio, así que se cambia en uno de estos lugares, según el hosting:
- Panel de control del hosting. La mayoría de los paneles tienen una página de ajustes de PHP o un "editor de PHP INI" con
max_input_varsen la lista. Es la forma más segura. - php.ini o .user.ini en la raíz del sitio, donde el hosting lo permita:
Un archivo; PHP configuration (php.ini or .user.ini in the site root) max_input_vars = 5000.user.inisolo se vuelve a leer cada pocos minutos por defecto, así que espera antes de probar. - .htaccess, solo cuando PHP se ejecuta como módulo de Apache:
Si después de esto el sitio responde con un error 500, PHP se ejecuta como FastCGI o PHP-FPM, que no acepta# .htaccess in the site root, at the bottom php_value max_input_vars 5000php_value. Elimina la línea y usa el panel o.user.ini. - Pool de PHP-FPM en tu propio servidor:
php_admin_value[max_input_vars] = 5000en la configuración del pool y, después, reinicia PHP-FPM.
ini_set('max_input_vars', ...) en wp-config.php o en un plugin no funciona. PHP lee el formulario enviado antes de que se ejecute cualquier código de WordPress, y esta directiva no se puede cambiar en tiempo de ejecución.
5000 basta para la mayoría de las tiendas. Si varias monedas usan seleccionar todo (Select all) en las reglas de GeoIP, o la tienda tiene más de 200 monedas, establece 10000 o más; el límite solo protege al servidor de solicitudes anormalmente grandes, y un valor más alto no cuesta nada en el uso normal. Después:
- recarga WooCommerce → Estado y comprueba que Variables de entrada máximas de PHP (PHP max input vars) muestra el nuevo valor;
- abre los ajustes de FOX y vuelve a introducir lo que se perdió: los campos cortados se guardaron vacíos, así que no regresan por sí solos;
- guarda, recarga la página y comprueba las reglas de GeoIP de la última moneda y la pestaña Avanzado (Advanced).
Otras razones por las que un ajuste no se mantiene
Monedas que vuelven después de eliminarlas
FOX necesita al menos dos monedas. Cuando hay menos de dos guardadas, recurre a su par por defecto (USD más EUR, o USD más la moneda de tu WooCommerce), de modo que borrar una fila puede devolver una moneda que acabas de quitar. Para sustituir una moneda, escribe el código nuevo en la fila existente, pulsa el botón de actualizar junto a su tipo de cambio, ajusta el símbolo y guarda.
Hazlo en una fila que no esté marcada como moneda base. Al guardar, FOX escribe el código de la fila base en el ajuste de moneda del propio WooCommerce, así que cambiar ese código cambia la moneda de toda la tienda, mientras que los precios de los productos siguen siendo los mismos números de antes.
El botón Agregar moneda muestra un mensaje en lugar de una fila nueva
Ese mensaje procede de la versión gratuita de FOX, que está limitada a dos monedas. No es un problema de guardado; consulta cómo actualizar FOX de la versión gratuita a la completa.
Partes de la página con sus propios botones de guardado
- Diseñador. Los diseños del selector se guardan con los botones Guardar cambios (Save changes) y Guardar y Salir (Save and exit) del panel del diseñador. El botón principal Guardar cambios (Save changes) del final de la página no los guarda.
- Perfiles de GeoIP. Añadir nuevo perfil (Add new profile) y Actualizar el perfil (Update profile) guardan un perfil de inmediato. Añadir: (Add to:) solo copia sus países a las reglas de una moneda de la página; las reglas se guardan con el botón principal Guardar cambios (Save changes), y se aplica el mismo límite de campos.
Error 403 al guardar
Una página 403 en lugar de los ajustes recargados procede de una regla de seguridad del servidor, normalmente mod_security, a la que no le gusta el tamaño o el contenido de la solicitud. Consulta el error 403 al guardar los ajustes del plugin.
La página de ajustes está en blanco, carga sin fin o sus botones no hacen nada
Las pestañas, los menús desplegables y los botones de la página de ajustes funcionan con JavaScript. Si Agregar moneda (Append Currency), Actualizar todas las tarifas (Update all rates) o las pestañas no reaccionan, abre la consola del navegador (F12, pestaña Consola (Console)) en la página de ajustes y vuelve a pulsar el botón. Un error del script de administración de otro plugin detiene los scripts de FOX en la misma página. El archivo que menciona el error indica de qué plugin se trata; para confirmarlo, desactiva todo excepto WooCommerce y FOX en una copia de pruebas y vuelve a probar.
- Una pestaña está vacía aunque la página se cargó: la hoja de estilos de un tema de administración o de un plugin de personalización del administrador está ocultando el contenido. Prueba con ese plugin desactivado.
- La página se bloquea después de activar la opción Estadísticamente (Statistic). Establece Estadísticamente (Statistic) en la pestaña Avanzado (Advanced) como No. Si la página no se puede abrir en absoluto, ejecuta
wp option update woocs_collect_statistic 0con WP-CLI. - El guardado termina con un tiempo de espera agotado o un error 500. El registro de errores de PHP indica el archivo que falló.
Como último recurso, las opciones de FOX se pueden devolver a sus valores por defecto poniendo la opción woocs_first_activation a 0 (wp option update woocs_first_activation 0 con WP-CLI, o en la tabla wp_options) y cargando una vez cualquier página del sitio. Esto restablece todas las opciones (Es múltiple permitido (Is multiple allowed), por ejemplo, vuelve a Sí (Yes)), borra las reglas de GeoIP y las reglas de pagos, y conserva la lista de monedas. Haz antes una copia de seguridad de la base de datos y anota tus ajustes.
Lista de verificación
- Variables de entrada máximas de PHP (PHP max input vars) en WooCommerce → Estado es 5000 o más (10000 con listas grandes de países de GeoIP).
- Datos perdidos vueltos a introducir y guardados una vez más después de subir el límite.
- Monedas sustituidas editando una fila, no borrándola, y la fila base sin tocar.
- Diseños y perfiles de GeoIP guardados con sus propios botones.
- Sin errores en la consola del navegador en la página de ajustes.
Si los ajustes siguen sin mantenerse con un límite alto y una consola limpia, abre un tema en el foro de soporte de FOX con el número de monedas, el valor de Variables de entrada máximas de PHP (PHP max input vars) y el ajuste que no se guarda, y lo revisaremos.