it-swarm.com.de

"Funktionsrückgabewert kann nicht im Schreibkontext verwendet werden" Fehler

Ich habe mein Plugin, Disable Blogging , auf die neueste Version aktualisiert, die im WordPress-Repository verfügbar ist.

Alles funktioniert wie es sollte. Einer meiner Benutzer hat jedoch einen Fehler beim Aktualisieren meines Plugins festgestellt.

Schwerwiegender Fehler : Rückgabewert der Funktion kann im Schreibkontext in .../wp-content/plugins/disable-blogging/includes/functions-extra.php in Zeile 74 nicht verwendet werden

Sie führen dieses Plugin auf zwei anderen Sites aus, deren Eigentümer sie sind, und es gibt kein Problem. Der einzige Unterschied ist die PHP Version:

  • Derjenige, der den Fehler hat, ist ein GoDaddy-Server und könnte PHP 5.4.45 sein.
  • Die anderen sind auf Digital Ocean und PHP 5.6.25

Wenn Sie sich meinen Quellcode ansehen, finden Sie hier den Verweiscode in Zeile 74, der Teil einer Funktion ist:

'meta' => array( 'class' => empty( get_avatar( get_current_user_id(), 28 ) ) ? '' : 'with-avatar', ),

Aber hier ist der vollständige Code für diese Funktion. Diese Funktion entfernt einfach die Begrüßung "Howdy" in der Admin-Leiste.

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

Nach meiner Einschätzung könnte dies ein Kompatibilitätsproblem mit PHP 5.4 sein. Ich habe das Plugin auf 5.6 entwickelt und laut PHP wird Version 5.4 nicht mehr unterstützt .

In diesem Fall hätte ich gerne eine Bestätigung. Auf diese Weise kann ich das dem Benutzer zurückgeben und sogar eine Funktion hinzufügen, um die PHP -Version einer WordPress-Site zu überprüfen, bevor sie aktiviert wird.

Wie von Dave Romsey und JHoffmann angegeben, habe ich eine einfachere Logik implementiert, ohne empty() zu verwenden:

'meta' => array( 'class' => empty( get_avatar( get_current_user_id(), 28 ) ) ? '' : 'with-avatar', ),

ist jetzt:

'meta' => array( 'class' => ( get_avatar( get_current_user_id(), 28 ) ) ? 'with-avatar' : '', ),

Ich habe auch eine return am Ende der Funktion eingefügt:

return $wp_admin_bar;

Hier ist der vollständige Code:

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

Die Ursache für das inkonsistente Verhalten auf den Hosts liegt in den verschiedenen PHP Versionen. Wenn Sie im Handbuch PHP nach dem Sprachkonstrukt empty() suchen, können Sie im Changelog Folgendes nachlesen:

5.5.0 empty () unterstützt jetzt Ausdrücke anstatt nur Variablen.

Daher ist es erst seit PHP 5.5 möglich, Ausdrücke innerhalb von empty()) zu verwenden, wie dies in Ihrem Plugin geschieht. In diesem Fall wird die Verwendung von empty() nicht benötigt und der Code sollte einfach ohne funktionieren:

'meta' => array( 'class' => get_avatar( get_current_user_id(), 28 ) ? 'with-avatar' : '', ),
3
JHoffmann