J'ai mis à jour mon plugin, Disable Blogging , vers la dernière version disponible dans le référentiel WordPress.
Tout fonctionne comme il se doit. Cependant, l'un de mes utilisateurs a rencontré une erreur lors de la mise à jour de mon plugin.
Erreur fatale : Impossible d’utiliser la valeur renvoyée par la fonction dans le contexte d’écriture dans
.../wp-content/plugins/disable-blogging/includes/functions-extra.php
sur ligne 74
Ils exécutent ce plugin sur deux autres sites qu'ils possèdent et il n'y a aucun problème. La seule différence est la version PHP:
En regardant dans mon code source, voici le code de renvoi à la ligne 74 qui fait partie d'une fonction:
'meta' => array( 'class' => empty( get_avatar( get_current_user_id(), 28 ) ) ? '' : 'with-avatar', ),
Mais voici le code complet de cette fonction. Cette fonction supprime simplement le message d'accueil "Howdy" dans la barre d'administration.
public function admin_greeting( $wp_admin_bar ) {
# Remove admin greeting in all languages
if ( 0 != get_current_user_id() ) {
$wp_admin_bar->add_menu( array(
'id' => 'my-account',
'parent' => 'top-secondary',
'title' => wp_get_current_user()->display_name . get_avatar( get_current_user_id(), 28 ),
'href' => get_edit_profile_url( get_current_user_id() ),
'meta' => array( 'class' => empty( get_avatar( get_current_user_id(), 28 ) ) ? '' : 'with-avatar', ),
) );
}
}
À mon avis, cela pourrait être un problème de compatibilité avec PHP 5.4? J'ai développé le plugin sur 5.6 et selon PHP, la version 5.4 n'est plus supportée .
Si tel est le cas, j'aimerais avoir une confirmation à ce sujet. De cette façon, je peux relayer cela à l'utilisateur et même ajouter une fonction pour vérifier la version PHP de tout site WordPress avant qu'il ne soit activé.
Comme indiqué par Dave Romsey et JHoffmann , j'ai implémenté une logique plus simple sans utiliser empty()
:
'meta' => array( 'class' => empty( get_avatar( get_current_user_id(), 28 ) ) ? '' : 'with-avatar', ),
est maintenant:
'meta' => array( 'class' => ( get_avatar( get_current_user_id(), 28 ) ) ? 'with-avatar' : '', ),
J'ai également inclus une return
à la fin de la fonction:
return $wp_admin_bar;
Voici le code complet:
public function admin_greeting( $wp_admin_bar ) {
# Remove admin greeting in all languages
if ( 0 != get_current_user_id() ) {
$wp_admin_bar->add_menu( array(
'id' => 'my-account',
'parent' => 'top-secondary',
'title' => wp_get_current_user()->display_name . get_avatar( get_current_user_id(), 28 ),
'href' => get_edit_profile_url( get_current_user_id() ),
'meta' => array( 'class' => ( get_avatar( get_current_user_id(), 28 ) ) ? 'with-avatar' : '', ),
) );
return $wp_admin_bar;
}
}
La cause du comportement inconsistant sur les hôtes a ses racines dans les différentes versions de PHP. Si vous vérifiez la construction __ PHP manual pour le langage empty()
, vous pouvez voir dans le journal des modifications:
5.5.0 empty () supporte maintenant les expressions plutôt que seulement les variables.
C'est donc uniquement depuis PHP 5.5 qu'il est possible d'utiliser des expressions à l'intérieur de empty())
comme cela est fait dans votre plugin. Dans ce cas, l'utilisation de empty()
n'est pas nécessaire et le code devrait simplement fonctionner sans elle:
'meta' => array( 'class' => get_avatar( get_current_user_id(), 28 ) ? 'with-avatar' : '', ),