"No se puede usar el valor de retorno de la función en el contexto de escritura" error

2

He actualizado mi complemento, Disable Blogging , a la última versión disponible en el repositorio de WordPress.

Todo funciona como debería. Sin embargo, uno de mis usuarios ha encontrado un error al actualizar mi complemento.

  

Error grave : no se puede usar el valor de retorno de la función en el contexto de escritura en .../wp-content/plugins/disable-blogging/includes/functions-extra.php en línea 74

Ejecutan este complemento en otros dos sitios que son de su propiedad y no hay problema. La única diferencia es la versión de PHP:

  • El que tiene el error es un servidor GoDaddy y podría ser PHP 5.4.45
  • Los otros están en Digital Ocean y PHP 5.6.25

Buscando en mi código fuente, aquí está el código de referencia en la línea 74 que forma parte de una función:

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

Pero aquí está el código completo para esa función. Esta función simplemente elimina el saludo "Howdy" en la barra de administración.

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

Desde mi punto de vista, esto podría ser un problema de compatibilidad con PHP 5.4. He estado desarrollando el complemento en 5.6 y, según PHP, la versión 5.4 ya no es compatible .

Si ese es el caso, me gustaría tener una confirmación de eso. De esta manera, puedo retransmitir eso al usuario e incluso agregar una función para verificar la versión de PHP de cualquier sitio de WordPress antes de que se active.

    
pregunta Ethan Jinks O'Sullivan 26.11.2016 - 00:10

2 respuestas

3

Según lo indicado por Dave Romsey y JHoffmann , he implementado una lógica más simple sin usar empty() :

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

es ahora:

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

También incluí un return al final de la función:

return $wp_admin_bar;

Aquí está el código completo:

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;
    }
}
    
respondido por el Ethan Jinks O'Sullivan 26.11.2016 - 15:22
3

La causa del comportamiento incoherente en los hosts tiene sus raíces en las diferentes versiones de PHP. Si revisa el manual de PHP para la construcción del lenguaje empty() , puede ver en el registro de cambios:

  

5.5.0 empty () ahora admite expresiones, en lugar de solo variables.

Por lo tanto, solo desde PHP 5.5 es posible usar expresiones dentro de empty()) como se hace en su complemento. En este caso, el uso de empty() no es necesario y el código debería funcionar simplemente sin él:

'meta' => array( 'class' => get_avatar( get_current_user_id(), 28 ) ? 'with-avatar' : '', ),
    
respondido por el JHoffmann 26.11.2016 - 10:30

Lea otras preguntas en las etiquetas