web-dev-qa-db-ja.com

「書き込みコンテキストで関数の戻り値を使用できません」エラー

私のプラグイン、 ブログを無効にする をWordPressリポジトリで利用可能な最新バージョンに更新しました。

すべてが正常に機能します。しかし、私のユーザーの一人が私のプラグインを更新するときにエラーに遭遇しました。

致命的なエラー 74行目上の.../wp-content/plugins/disable-blogging/includes/functions-extra.phpの書き込みコンテキストで関数の戻り値を使用できない

彼らは彼らが所有している他の2つのサイトでこのプラグインを実行していて問題はありません。唯一の違いはPHPバージョンです。

  • errorを持つものはGoDaddyサーバーであり、 PHP 5.4.45 のようになります。
  • 他はDigital Oceanにあり、 PHP 5.6.25

私のソースコードを見ると、74行目の参照コードは関数の一部です。

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

しかし、これがその機能の完全なコードです。この機能は管理バーの "Howdy"グリーティングを削除するだけです。

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

私の推測では、これはPHP 5.4との互換性の問題になる可能性があります。私は5.6でプラグインを開発していました、そしてPHPによれば、 バージョン5.4はもうサポートされていません

その場合は、確認をお願いします。こうすれば私はそれをユーザに伝え、それがアクティブになる前にWordPressサイトのPHPバージョンをチェックする機能を追加することさえできます。

Dave Romsey および JHoffmann で述べられているように、私はempty()を使わずに単純なロジックを実装しました。

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

今です:

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

関数の最後にreturnも含めました。

return $wp_admin_bar;

これが完全なコードです。

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

ホスト上で矛盾した動作が発生する原因は、PHPバージョンの違いにあります。 empty()言語の構文について PHP manual をチェックすると、変更履歴を見ることができます。

5.5.0 empty()は変数だけではなく式をサポートするようになりました。

だからあなたのプラグインで行われているようにempty())の中で式を使うことが可能なのはPHP 5.5以降だけです。この場合、empty()の使用は必要ではなく、コードはそれなしでも簡単に動作するはずです。

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