WordPress -> ¿Si se muestra la imagen del suscriptor de roles?

6 minutos de lectura

avatar de usuario
allen payne

Así que este es el trato… Tengo WordPress + bbPress integrado con un software de membresía (aMember).

En mis foros de bbPress, bajo el nombre de usuario de las personas, quiero mostrar los roles de WordPress (no los roles de bbpress) de cada miembro y también una imagen según el rol de cada miembro.

Por ejemplo,

Si el rol de usuario es suscriptor -> Mostrar rol bajo nombre de usuario en bbpress -> Mostrar también una imagen a continuación.

La razón por la que quiero mostrar los roles de WordPress (en lugar de los roles de bbpress) es que mi software de membresía (amember) me permite establecer diferentes roles de wordpress según la suscripción del usuario. Tengo 2 planes de membresía diferentes en mi sitio (uno gratuito y uno de pago) y quiero mostrar diferentes imágenes en mis foros de bbpress según su plan.

Revisé las plantillas de bbPress y encontré este código (en loop-single-reply.php):

<?php bbp_reply_author_link( array( 'sep' => '<br />', 'show_role' => true ) ); ?> // this shows the bbpress role
<?php echo 'Points: '.cp_getPoints(bbp_get_reply_author_id()); ?> // this shows the member points below the username - I use a points plugin)

Ahora, ¿cómo puedo reemplazar este código con un código que muestre los roles de WordPress (no bbpress) para cada usuario y también muestre una imagen debajo dependiendo de qué roles sean? Por ejemplo:

Si es el rol “Suscriptor” -> Mostrar rol + imagen debajo

Si es el rol “Colaborador” -> Mostrar rol + imagen debajo

Si es el rol “Administrador” -> Mostrar rol + imagen debajo

No soy programador, así que no tengo idea de cómo lograr esto. Por favor ayuda. Encontré un código relacionado que creo que podría usar para hacer que esto funcione:

<?php if ( current_user_can('contributor') ) : ?>
Content
<?php endif; ?>

Ahora mi intento fallido se ve así:

<?php 

$user_roles = $current_user->roles;
$current_user = $bbp_get_reply_author_id; // i think this is wrong :P
$user_role = array_shift($user_roles);
?>
<?php if ($user_role == 'administrator') : ?>

Show Role  
Show Image

<?php elseif ($user_role == 'editor') : ?>

Show Role
Show Editor Image

<?php elseif ($user_role == 'author') : ?>

Show Role
Show Author Image

<?php elseif ($user_role == 'contributor') : ?>

Show Role
Show Contributor Image

<?php elseif ($user_role == 'subscriber') : ?>

Show Role
Show Subscriber Image

<?php else : ?> 

Show Role

<?php endif ?>

No tengo idea de lo que estoy haciendo… El código anterior es algo que encontré en Google.

¿Alguien puede ayudar?

Yo realmente lo apreciaría.

avatar de usuario
david chase

Se vería así para probar si un usuario es un suscriptor.

<?php
global $current_user; 
get_currentuserinfo(); 
if ( user_can( $current_user, "subscriber" ) ){ 
// Show Role
// Show Subscriber Image
} 

en su caso, si desea realizar varias comprobaciones de usuario, usaría una declaración de cambio como esa

global $current_user; 
get_currentuserinfo();
switch (true)  {
 case ( user_can( $current_user, "subscriber") ):
   // Show Role
   // Show Subscriber Image
 break;
 case ( user_can( $current_user, "contributor") ):
   // Show Role
   // Show Contributor Image
 break;
 case ( user_can( $current_user, "administrator") ):
   // Show Role
   // Show Administrator Image
 break;
}

puede continuar con la declaración de cambio con más roles de usuario.

EDITADO

global $current_user; 
get_currentuserinfo();
switch (true)  {
 case ( user_can( $current_user, "subscriber") ):
   echo '<img src="http:www.impho.com/images/001.jpg">';
 break;
 case ( user_can( $current_user, "contributor") ):
   echo '<img src="http:www.impho.com/images/002.jpg">';
 break;
 case ( user_can( $current_user, "administrator") ):
  echo '<img src="http:www.impho.com/images/003.jpg">';
 break;
}

EDITADO BASADO EN SOLICITUDES DE USUARIO

Ok, esto debería hacerlo, reemplace todo el código que tiene obteniendo el nombre de usuario, el avatar, los puntos y la imagen usando el siguiente código.

En tus funciones coloca esto

function userLooping($role, $img)
{
$user_query = new WP_User_Query( array( 'role' => $role ) );

// User Loop
if ( !empty( $user_query->results ) ):
    foreach ( $user_query->results as $user ):
        echo '<p>'. $user->display_name.'</p>'; // display user name
        echo '<p>'.get_avatar($user->ID).'</p>'; // display user avatar
        //echo '<p>Points: '.cp_getPoints(bbp_get_reply_author_id()).'</p>';
        echo '<p>'.$img.'</p>'; //display image based on role
    endforeach;
endif;
}

quitar el // en frente de echo arriba

Coloque lo siguiente dentro de su plantilla

<?php 
$args = array( array('role' => 'administrator', 'img' => '<img src="http://placeape.com/100/100">'),array('role' => 'subscriber', 'img' => '<img src="http://placekitten.com/100/100">'));
foreach ($args as $arg):
 userLooping($arg['role'],$arg['img']);
endforeach;
?>

para agregar más roles e imágenes, simplemente agregue una nueva matriz después del suscriptor

  • Gracias por su respuesta. probó su código y me da este error: Parse error: syntax error, inesperado ‘)’, esperando ‘:’ o ‘{‘ in. El archivo donde estoy tratando de usar este código es un archivo de plantilla bbpress, si eso hace alguna diferencia. Solo pensé que debería hacértelo saber.

    –Allen Payne

    11 de marzo de 2013 a las 2:25


  • Olvidé mencionar que necesito usar bbp_get_reply_author_id() para mostrar las imágenes de cada miembro en los foros de bbpress. así que no creo que get_currentuserinfo() funcione. no estoy seguro, corrígeme si me equivoco.

    –Allen Payne

    11 de marzo de 2013 a las 2:28

  • Lo siento, inténtalo de nuevo. Tuve un paréntesis adicional en mi declaración de cambio. Edité el código y lo publiqué de nuevo.

    –David Chase

    11 de marzo de 2013 a las 2:44

  • Todavía no funciona… Recibo este error: Error de análisis: error de sintaxis, T_BREAK inesperado…

    –Allen Payne

    11 de marzo de 2013 a las 3:07

  • Mientras estás en eso, ¿puedes también decirme cómo puedo reemplazar get_currentuserinfo(); con bbp_get_reply_author_id(); Cómo aplicar el código a mis foros de bbpress? (ver mi respuesta arriba)

    –Allen Payne

    11 de marzo de 2013 a las 3:08


ENCONTRÉ UNA SOLUCIÓN MUCHO MÁS SENCILLA:

<?php
global $forumuser; 
$forumuser = bbp_get_reply_author_id();
switch (true)  {
case ( user_can( $forumuser, "author") ):
echo '<img src="http://www.impho.com/images/image1.png">';
break;
case ( user_can( $forumuser, "premium") ):
echo '<img src="http://www.impho.com/images/image2.png">';
break;
case ( user_can( $forumuser, "starter") ):
echo '<img src="http://www.impho.com/images/image3.png">';
break;
case ( user_can( $forumuser, "subscriber") ):
echo '<img src="http://www.impho.com/images/image4.png">';
break;
}
?>

Los roles de inicio y premium son roles personalizados que creé usando el complemento Editor de roles de usuario.

Todo parece funcionar bien ahora.

avatar de usuario
danio

Sé que es un poco tarde, pero aquí está mi solución, que creo que es la más corta y eficiente:

$current_user = new WP_User(wp_get_current_user()->id);
$user_roles = $current_user->roles; 
foreach ($user_roles as $role) {

   if  ($role == 'subscriber' ){
     //code here for subscribers
   }

   if  ($role == 'editor' ){
     //code here for editors
   }

}

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad