ユーザーロールをクラスとして返す場合のPHP7.2での配列から文字列への変換エラー

免責事項:私は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に準拠しているので、配列を正しく処理する方法が変わったと思いますか?修正方法について何か考えはありますか?

コメント

  • これは実際の正確なコードですか?新規インストールに正確にコピーしても、エラーは発生しません。スローされるエラーがこの関数に対するものであると確信していますか?
  • こんにちはジェイコブ、私に戻ってきてくれてありがとう-はい、それは私の正確なコードです。 header.phpファイルのbodyタグで関数を呼び出しているので、それを見て、他に何かがそのエラーを引き起こしている可能性があるかどうかを確認します。ただし、この関数に含まれていることは確かです…
  • 待って、申し訳ありませんが、どういう意味ですか"ヘッダーのbodyタグで関数を呼び出しています.phpファイル"。このようなフィルターのコードはfunctions.phpに属しており、ヘッダーファイルで<?php body_class(); ?>を使用します。
  • 申し訳ありませんが、投稿するのが遅れたので、 '自分自身を明確にしませんでした。これが私のヘッダーにあるものです:<body <?php body_class( 'animate'); ?> id="top">なので、'は正しく設定されています。問題を発見したようです-bodyタグからすべてのクラスを削除していたため、クラスを追加する前にユーザーがログインしていることを確認する必要がありました。同じ問題で立ち往生している他の人のために今すぐ回答を投稿します-あなたの助けに感謝します!

回答

このコードは機能し、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"); 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です