私のプラグイン、 ブログを無効にする をWordPressリポジトリで利用可能な最新バージョンに更新しました。
すべてが正常に機能します。しかし、私のユーザーの一人が私のプラグインを更新するときにエラーに遭遇しました。
致命的なエラー :74行目上の
.../wp-content/plugins/disable-blogging/includes/functions-extra.php
の書き込みコンテキストで関数の戻り値を使用できない
彼らは彼らが所有している他の2つのサイトでこのプラグインを実行していて問題はありません。唯一の違いはPHPバージョンです。
私のソースコードを見ると、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' : '', ),