免責事項:私は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に準拠しているので、配列を正しく処理する方法が変わったと思いますか?修正方法について何か考えはありますか?
コメント
回答
このコードは機能し、7.3で実行され、完全に有効です。ただし、ユーザーに2つの役割がある場合を除きます。
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; });
回答
問題はユーザーがチェックしていないことであることがわかりましたクラスを追加する前にログインしました。同じ問題を抱えている人のための私の作業コードは次のとおりです。
header.php
<body <?php body_class( "animate" ); ?>>
(注:「animate」クラスは関係ありません。私のサイトで使用されているだけです)
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(); ?>
を使用します。<body <?php body_class( 'animate'); ?> id="top">
なので、'は正しく設定されています。問題を発見したようです-bodyタグからすべてのクラスを削除していたため、クラスを追加する前にユーザーがログインしていることを確認する必要がありました。同じ問題で立ち往生している他の人のために今すぐ回答を投稿します-あなたの助けに感謝します!