Mensaje completo: Aviso: WP_Scripts::localize se llamó incorrectamente. El parámetro $l10n debe ser una matriz. Para pasar datos arbitrarios a los scripts, use la función wp_add_inline_script() en su lugar. Consulte Depuración en WordPress para obtener más información. (Este mensaje se agregó en la versión 5.7.0.) en /home3/dduconne/public_html/wp-includes/functions.php en la línea 5313
Apareció justo después de actualizar wordpress a 5.7.0
FantasmaPengy
Ok, ya que hay bastantes vistas y la respuesta anterior simplemente lo tira debajo de la alfombra.
Sí, ahora es una advertencia, pero quién sabe qué pasará, es una advertencia por una razón, deshabilitar algo no lo resuelve, hay una razón por la cual los desarrolladores lo establecieron como una advertencia por ahora.
Mientras esperamos a que los desarrolladores de complementos lo resuelvan, puede averiguar el origen del problema habilitando php_xdebug
en php. Recomiendo no dejarlo después de la depuración, ya que no estoy seguro del costo de rendimiento de su activación.
php_xdebug
devolverá una pila de todos los archivos afectados, desde allí puede rastrearlo hasta el origen del problema. La solución una vez encontrada la fuente es bastante fácil. Lo más probable es que el culpable sea wp_localize_script()
que requiere que el último parámetro sea un array()
!
Así que encontrarías algo como esto:
wp_localize_script( 'handle', 'object_name', 'l10n_culprit_string' );
Que debe convertirse en:
wp_localize_script( 'handle', 'object_name', array( 'l10n_culprit_string' ) );
La solución al problema vino de aquí
-
esta debería ser la respuesta correcta. ¡Gracias!
– Leo Goño
9 mayo 2021 a las 15:56
-
Note también que la intención original detrás
wp_localize_script
estaba manejando cadenas traducibles en js. Todos lo hemos estado usando como un truco para pasar valores globales a scripts, no solo cadenas traducibles durante años. Todavía se puede usar de esa manera y funcionará, pero aparentemente, es una mejor práctica usarwp_add_inline_script
ahora en cambio. Ver desarrollador.wordpress.org/reference/functions/…– caramelo cuadrado
15 dic 2021 a las 19:45
Esta es una nueva advertencia que aparece en WordPress 5.7. Si no desea verlo y aún desea tener WP_DEBUG establecido en verdadero, es posible deshabilitar el mensaje agregando, por ejemplo, lo siguiente en functions.php de su tema:
add_filter('doing_it_wrong_trigger_error', function () {return false;}, 10, 0);
-
Esto no resuelve el problema, solo lo esconde debajo de la alfombra.
-Spencer Shattuck
17 de marzo de 2021 a las 20:18
-
Gracias. Funcionó por ahora. Esperemos la solución real de WP.
– Tiago
20 abr 2021 a las 18:59
-
Muy mal consejo y esta respuesta debería NO SER ACEPTADO. No resuelve nada.
– kanlukasz
29 de abril de 2021 a las 8:08
-
Invito a los que se quejan de mi respuesta a que presenten una mejor. POR SUPUESTO mi respuesta no resuelve el problema, ya que el problema radica en uno o varios de los complementos utilizados. Si es un autor de complementos, por supuesto, debe solucionar el problema (que, recalco, pasó desapercibido hasta ahora), asegurándose de que el tercer parámetro de wp_localize_script sea una matriz. Pero si no lo eres, ¿cuáles son las opciones? ¿Parchear los complementos defectuosos? No es una solución sostenible (ya he hecho eso). ¿Establecer WP_DEBUG en falso? Mucho peor que mi respuesta, ya que deshabilita no solo esta advertencia, sino muchas otras.
– Christer Fernström
30 de abril de 2021 a las 9:25
-
En realidad, el “problema” es mirar la interminable lista de errores que son inevitables debido a que WP no tiene los recursos para solucionar el problema. Sí, los complementos y los temas podrían volver a ser un recurso alternativo en alguna función, pero esto no SOLUCIONA el “problema” heredado. Sin embargo, SOLUCIONA el problema inicial de tener que mirar el texto de error redundante en su página; cuando en la práctica, podría estar usando ese espacio de cabeza para algo más relevante, como errores que PUEDE corregir. Subí la respuesta porque SÍ me ayudó. La instancia en la que estaba trabajando tenía demasiados complementos para aislar la fuente del error.
– comercio suroeste
1 mayo 2021 a las 21:44
Ahora es un aviso si está utilizando wp5.7 y php7.4, pero al cambiar a php8 puede aparecer como un error. Para mí, cuando cambié (en mi propio código) el valor pasado a la matriz (sí, probablemente también se necesitaron algunos cambios en los js involucrados), todo funcionó bien.
-
Hola @dominagy: este es un gran comentario e información importante (que se informa como un error cuando cambias a PHP8). Probablemente más apropiado como comentario sobre la respuesta de GhostPengy. Lo votaría como un comentario debajo de esa respuesta.
– caramelo cuadrado
15 de diciembre de 2021 a las 19:39
Esto se debe a que una de las secuencias de comandos PHP en su instalación de wordpress usa wp_localize_script() para pasar algunas variables de PHP a una secuencia de comandos JS a través de una solicitud AJAX, y ya no es una buena práctica. Esto puede estar dentro de un complemento o dentro de su tema personalizado o functions.php de child-theme. Si wp_localize_script() no está en un tema infantil o funciones de tema personalizado.php, intente esto:
- copia de seguridad de su sitio web
- desactivar todos los complementos
- reactivarlos uno a uno hasta que te llegue de nuevo el aviso
- cuando el aviso vuelve a aparecer, significa que el complemento que acaba de reactivar usa wp_localize_script() de manera incorrecta
- si no está actualizado, intente actualizarlo (si lo desea): tal vez el aviso desaparezca
- si ya está actualizado, o no desea actualizarlo, busque dentro de wp-content/plugins la carpeta del complemento correspondiente
- ábralo e intente encontrar los archivos donde se llama wp_localize_script(), también puede usar CLI con la terminal de su servidor para encontrar cadenas en los archivos. Por ejemplo, si su servidor se ejecuta en Linux: grep -H -r “wp_localize_script()” /root/pathtopluginfolder | cortar -d: -f1
- Luego, reemplace el código de la siguiente manera:
El anterior debería verse casi así:
wp_enqueue_script( 'wpdocs-my-script', 'https://url-to/my-script.js' );
wp_localize_script( 'wpdocs-my-script', 'MYSCRIPT', array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'otherParam' => 'some value',
) );
Uno nuevo :
wp_enqueue_script( 'wpdocs-my-script', 'https://url-to/my-script.js' );
wp_add_inline_script( 'wpdocs-my-script', 'const MYSCRIPT = ' . json_encode( array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'otherParam' => 'some value',
) ), 'before' );
Tenga en cuenta que debe agregar ‘antes’ como tercer parámetro a la función wp_add_inline_script.
Una vez hecho esto, el aviso ya no debería mostrarse. Si es así, comuníquese con el desarrollador del complemento para informarle sobre esto para que pueda ser parte de la próxima actualización.
Para obtener más información, consulte el comentario de Jules Colle en esta página: https://developer.wordpress.org/reference/functions/wp_add_inline_script/
Vi que el complemento de accesibilidad de WP causó este problema, pero estoy seguro de que no es el único. Si tiene curiosidad sobre cuál de sus complementos lo está causando, deshabilítelos uno a la vez hasta que desaparezca, ¡entonces sabrá cuál es el responsable!
– tobybot
15 de marzo de 2021 a las 17:41