errors – ¿Cómo mostrar el aviso de error de administrador si la configuración se guardó correctamente?

Pregunta:

El título suena contrario a la intuición, pero tengan paciencia conmigo. 🙂

Tengo una página de opciones, hecha con la API de configuración. Cuando el usuario ingresa datos no válidos, quiero mostrar un aviso de error con la llamada add_settings_error() .

¡Pero! Para determinar que los datos no son válidos, necesito realizar una llamada API remota. Esa llamada se basa en datos guardados. Así que no puedo hacer esto en la devolución de llamada de desinfección (que es el lugar recomendado para lanzar tales avisos) porque mis datos aún no están guardados.

En su lugar, intenté conectar mi cheque a admin_notices . Funciona bien la mayor parte del tiempo, excepto en un caso (y el más importante): cuando se guardan las configuraciones, siempre van seguidas de las configuraciones nativas guardadas. aviso y mis avisos personalizados se ignoran por completo por alguna razón.

Entonces, ¿cómo lanzo ese aviso de error incluso si WP piensa que todo está bien?

Editar

Pregunta más centrada: por qué se guardó exactamente la Configuración. triunfa sobre cualquier otro aviso?

PD: podría intentar hacer que la llamada a la API opcionalmente tome datos como argumento en lugar de leerlos desde la opción guardada, pero hasta ahora creo que hará que los argumentos sean demasiado voluminosos.

Respuesta:

Ok, creo que tengo una idea de lo que está pasando.

  1. La lista de avisos para mostrar es recuperada por get_settings_errors() ( fuente ).

  2. Esta función lee los avisos de $wp_settings_errors globales a menos que haya un conjunto transitorio de settings_errors , que prevalece sobre la var global.

  3. Cuando se guardan las configuraciones, se comprueba que no haya errores de configuración y, de ser así, se guardan las configuraciones. se genera aviso. Después de eso (en cualquier caso) los errores se guardan en settings_errors transient (supongo que los conservaré en la redirección) ( fuente ).

Básicamente, no importa qué avisos genere en su código, se ignorarán cuando se establezca transitorio y siempre se establecerá después de guardar la configuración.

En cuanto a mí, tendría sentido concatenar transitorio con variable global en lugar de hacerlo exclusivo o de elección.

Y supongo que para mostrar avisos personalizados cuando se establece el transitorio, tendré que lidiar con ese transitorio, lo que probablemente no valga la pena.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım