Taulukko merkkijonon muuntovirheeksi PHP 7.2: ssa, kun palautetaan käyttäjän rooli luokassa

Vastuuvapauslauseke: Olen roskaa PHP: ssä, joten ole hyvä minua kun minä ”m yhä oppimassa. Saan PHP-virheen Array to string conversion seuraavaa koodia varten:

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

Tämä alkoi tapahtua vasta päivityksen jälkeen PHP 7.2: een, joten oletan, että asiat ovat muuttuneet siinä, miten minun täytyy käsitellä matriiseja oikein? Onko sinulla ideaa korjata?

Kommentit

  • Onko tämä oikea, tarkka koodisi? Kopioitu tarkalleen uuteen asennukseen ei aiheuta minulle virheitä. Oletko varma, että heitettävä virhe johtuu tästä toiminnosta?
  • Hei Jacob, kiitos, että otit yhteyttä minuun – kyllä, se on tarkka koodini. Soitan funktiota header.php-tiedostoni body tagissa, joten tutustu siihen ja näe, voisiko jokin muu laukaista virheen. Melko varma, että se on kuitenkin tässä toiminnossa …
  • Odota, anteeksi, mitä tarkoitat " Kutsun funktiota otsikon tekstitunnisteessa .php-tiedosto ". Tämänkaltaisten suodattimien koodi kuuluu toimintoihin.php, ja sitten käytät otsikkotiedostossasi <?php body_class(); ?>.
  • Valitettavasti myöhästyin, kun lähetin sen, joten didn ' ei tehnyt itseäni selväksi. Tämä on mitä otsikossa on: <body <?php body_class( 'animate'); ?> id="top"> joten se ' on määritetty oikein. Vaikuttaa siltä, että olen löytänyt ongelman – minun oli tarkistettava, että käyttäjä on kirjautunut sisään ennen luokkien lisäämistä, koska se poisti kaikki luokat body-tagista. Lähettää vastauksen kaikille muille, jotka ovat kiinnittyneet samaan ongelmaan – kiitos avustasi!

Vastaa

Tämä koodi toimii ja on kelvollinen, käynnissä 7.3: lla, paitsi jos käyttäjälläsi on kaksi roolia:

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

Sitten, mitä tiedät, sama virhe . Lisäksi välität merkkijonon nimellä $classes nimettömälle funktiollesi, missä-koska suodatin vaatii selvästi matriisia.

Tee näin:

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

vastaus

Huomasin, että ongelma oli se, että en tarkistanut, onko käyttäjä kirjautui sisään ennen luokan lisäämistä. Tässä on työkoodini kaikille, joilla on sama ongelma:

header.php

<body <?php body_class( "animate" ); ?>> 

(Huomaa: ”animoida” -luokalla ei ole merkitystä, sitä käytetään juuri sivustollani)

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

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *