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
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");
<?php body_class(); ?>
.<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!