Aviso: Eu sou péssimo em PHP, então, por favor, tenha paciência comigo, pois sou ainda aprendendo. Estou recebendo o erro de PHP Array to string conversion
para o seguinte 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");
Isso só começou a acontecer depois que fiz a atualização para o PHP 7.2, então estou assumindo que as coisas mudaram com a maneira como preciso lidar com os arrays, Tem alguma ideia de como consertar?
Comentários
Resposta
Este código funciona e é perfeitamente válido, rodando em 7.3, exceto quando seu usuário tem duas funções:
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; });
Então, como você sabe, o mesmo erro aparece . Além disso, você está passando uma string como $classes
para sua função anônima, onde o filtro claramente exige uma matriz.
Faça isto em vez:
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; });
Resposta
Descobri que o problema era que não estava verificando se o usuário estava conectado antes de adicionar a classe. Este é meu código de trabalho para qualquer pessoa com o mesmo problema:
header.php
<body <?php body_class( "animate" ); ?>>
(Observação: a classe “animate” é irrelevante, ela é usada apenas em meu site)
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(); ?>
em seu arquivo de cabeçalho.<body <?php body_class( 'animate'); ?> id="top">
para que ' esteja configurado corretamente. Parece que encontrei o problema – eu precisava verificar se o usuário está conectado antes de adicionar qualquer classe, pois isso estava removendo todas as classes da tag body. Postará a resposta agora para qualquer pessoa com o mesmo problema – obrigado por sua ajuda!