将用户角色作为类返回时,PHP 7.2中的数组到字符串转换错误

时间:2018-12-18 作者:Osu

免责声明:我对PHP一窍不通,所以请容忍我,因为我还在学习。我得到了PHP错误Array to string conversion 对于以下代码:

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\');
这只是在我升级到PHP 7.2之后才开始发生的,所以我假设情况已经发生了变化,我需要如何处理数组,对吗?知道如何修复吗?

2 个回复
SO网友:coolpasta

此代码在7.3上运行,非常有效,除非您的用户有两个角色:

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;
});
然后,你知道吗,同样的错误出现了。另外,您传递的字符串为$classes 到您的匿名函数,其中作为过滤器显然需要一个数组。

改为执行以下操作:

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

SO网友:Osu

我发现问题是我没有在添加类之前检查用户是否已登录。以下是我针对任何有相同问题的人的工作代码:

header.php

<body <?php body_class( \'animate\' ); ?> id="top">
(注意:“动画”类无关紧要,它只是在我的网站中使用的)

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\');

相关推荐

如何在WordPress主题中将页面标题(H1)移动到header.php(循环外)?

我正在尝试将我的页面标题放在标题中。php,因为我希望它在初始内容分区之前打印。令我惊讶的是,事实证明这相当具有挑战性。我尝试过使用\\u title(),这在大多数地方都有效,但在分类页面上,例如,它会提取第一篇文章的名称</我试过使用wp\\u title(),但我的站点标题中有我的站点名称,我不想在我的H1s中出现</我知道我可以做大量的if语句,只需确保我涵盖了每一个场景,但这似乎很混乱,肯定有一个更干净、更经得起未来考验的选项</提前非常感谢。