Erro de conversão de array para string no PHP 7.2 ao retornar a função do usuário como classe

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

  • Este é o seu código real e exato? Copiado exatamente para uma nova instalação não causa erros para mim. Tem certeza de que o erro lançado é para esta função?
  • Olá Jacob, obrigado por responder – sim, esse é o meu código exato. Estou chamando a função na tag body do meu arquivo header.php, então vou dar uma olhada nisso e ver se mais alguma coisa pode estar acionando esse erro. Mas tenho certeza de que está nesta função …
  • Espere, desculpe, o que você quer dizer " Estou chamando a função na tag do corpo do meu cabeçalho arquivo .php ". Código para filtros como este pertence a functions.php, e então você usa <?php body_class(); ?> em seu arquivo de cabeçalho.
  • Desculpe, era tarde quando postei isso, então eu não ' não fui claro. Isto é o que tenho em meu 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!

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"); 

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *