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
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");
<?php body_class(); ?>
en tu archivo de 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!