Error de conversión de matriz a cadena en PHP 7.2 cuando se devuelve el rol de usuario como clase

Descargo de responsabilidad: Soy una basura en PHP, así que por favor tengan paciencia conmigo. aún aprendiendo. Recibo el error de PHP Array to string conversion para el siguiente código:

function osu_add_role_to_body($classes = "") { $current_user = new WP_User(get_current_user_id()); $user_role = array_shift($current_user->roles); $classes = []; $classes[] = "role-" . $user_role; return $classes; } add_filter("body_class","osu_add_role_to_body"); 

Esto solo comenzó a suceder desde que actualicé a PHP 7.2, así que supongo que las cosas han cambiado con respecto a la forma en que debo lidiar con las matrices, ¿verdad? ¿Alguna idea de cómo solucionarlo?

Comentarios

  • ¿Es este su código real y exacto? Copiar exactamente en una instalación nueva no me causa ningún error. ¿Estás seguro de que el error arrojado es para esta función?
  • Hola Jacob, gracias por comunicarte conmigo. Sí, ese es mi código exacto. Estoy llamando a la función en la etiqueta del cuerpo de mi archivo header.php, así que echaré un vistazo a eso y veré si algo más podría desencadenar ese error. Sin embargo, estoy bastante seguro de que está en esta función …
  • Espera, lo siento, ¿qué quieres decir con " Estoy llamando a la función en la etiqueta del cuerpo de mi encabezado Archivo .php ". El código para filtros como este pertenece a functions.php, y luego usas <?php body_class(); ?> en tu archivo de encabezado.
  • Lo siento, era tarde cuando publiqué eso, así que No ' no me expuse claramente. Esto es lo que tengo en mi encabezado: <body <?php body_class( 'animate'); ?> id="top"> por lo que ' está configurado correctamente. Parece que encontré el problema: necesitaba verificar que el usuario haya iniciado sesión antes de agregar cualquier clase, ya que estaba eliminando todas las clases de la etiqueta del cuerpo. Publicaré la respuesta ahora para cualquier otra persona que tenga el mismo problema. ¡Gracias por su ayuda!

Responder

Este código funciona y es perfectamente válido, ejecutándose en 7.3, excepto cuando tu usuario tiene dos roles:

add_filter( "body_class", function( $classes = "" ) { $current_user = new \WP_User(get_current_user_id()); $user_role = ["administrator", "moderator"]; //just a test, but this is what it"ll look like if it had 2 roles. $classes = []; $classes[] = "role-" . $user_role; return $classes; }); 

Entonces, ¿qué sabes? Aparece el mismo error. . Además, «estás pasando una cadena como $classes a tu función anónima, mientras que el filtro claramente exige una matriz.

Haz esto en su lugar:

add_filter( "body_class", function( $classes ) { $current_user = wp_get_current_user(); foreach( $current_user->roles as $user_role ) { $classes[] = "role-" . $user_role; } return $classes; }); 

Responder

Descubrí que el problema era que no estaba comprobando si el usuario estaba iniciado sesión antes de agregar la clase. Aquí está mi código de trabajo para cualquier persona con el mismo problema:

header.php

<body <?php body_class( "animate" ); ?>> 

(Nota: la clase «animate» es irrelevante, se acaba de usar en mi sitio)

functions.php

function osu_add_role_to_body($classes = "") { if( is_user_logged_in() ) { $current_user = new WP_User(get_current_user_id()); $user_role = array_shift($current_user->roles); $classes[] = "role-" . $user_role; } return $classes; } add_filter("body_class","osu_add_role_to_body"); 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *