WordPress -> Wenn Rollenabonnent Bild anzeigen?

Lesezeit: 6 Minuten

Benutzer-Avatar
Allen Payne

Also hier ist der Deal.. Ich habe WordPress + bbPress mit einer Mitgliedschaftssoftware (aMember) integriert.

In meinen bbPress-Foren möchte ich unter dem Benutzernamen der Leute die WordPress-Rollen (nicht bbpress-Rollen) jedes Mitglieds und auch ein Bild abhängig von der Rolle jedes Mitglieds anzeigen.

Zum Beispiel,

Wenn die Benutzerrolle Abonnent ist -> Rolle unter Benutzername in bbpress anzeigen -> Auch unten ein Bild anzeigen.

Der Grund, warum ich WordPress-Rollen (anstelle von Bbpress-Rollen) anzeigen möchte, ist, dass meine Mitgliedschaftssoftware (amember) es mir ermöglicht, je nach Abonnement des Benutzers unterschiedliche WordPress-Rollen festzulegen. Ich habe 2 verschiedene Mitgliedschaftspläne auf meiner Website (einen kostenlosen und einen kostenpflichtigen) und ich möchte basierend auf ihrem Plan unterschiedliche Bilder in meinen bbpress-Foren zeigen.

Ich bin die bbPress-Vorlagen durchgegangen und habe diesen Code gefunden (in 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)

Wie kann ich diesen Code nun durch einen Code ersetzen, der die WordPress-Rollen (nicht bbpress) für jeden Benutzer anzeigt und je nach Rolle auch ein Bild darunter anzeigt. Zum Beispiel:

Wenn Rolle “Abonnent” ist -> Rolle + Bild darunter anzeigen

Wenn Rolle „Mitwirkender“ ist -> Rolle + Bild darunter anzeigen

Wenn die Rolle “Administrator” ist -> Rolle + Bild darunter anzeigen

Ich bin kein Programmierer, also habe ich keine Ahnung, wie ich das bewerkstelligen soll. Bitte helfen Sie. Ich habe einen verwandten Code gefunden, von dem ich denke, dass ich ihn verwenden könnte, um dies zum Laufen zu bringen:

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

Nun sieht mein Fehlversuch so aus:

<?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 ?>

Ich habe keine Ahnung, was ich tue … Der obige Code ist etwas, das ich bei Google gefunden habe.

Kann jemand helfen?

Ich würde es wirklich schätzen.

Benutzer-Avatar
David Chase

Es würde etwa so aussehen, um zu testen, ob ein Benutzer ein Abonnent ist.

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

In Ihrem Fall würde ich, wenn Sie mehrere Benutzerprüfungen durchführen möchten, eine solche Switch-Anweisung verwenden

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

Sie können die switch-Anweisung mit weiteren Benutzerrollen fortsetzen.

BEARBEITET

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

BEARBEITET AUF ANFRAGE DER BENUTZER

Ok, das sollte es tun, ersetzen Sie den gesamten Code, den Sie haben, um Benutzername, Avatar, Punkte und Bild mit dem folgenden Code zu erhalten.

Platzieren Sie dies in Ihren Funktionen

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

entferne das // vor dem echo Oben

Fügen Sie Folgendes in Ihre Vorlage ein

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

Um weitere Rollen und Bilder hinzuzufügen, fügen Sie einfach ein neues Array nach Abonnent hinzu

  • Vielen Dank für Ihre Antwort. Es hat Ihren Code ausprobiert und es gibt mir diesen Fehler: Parsing-Fehler: Syntaxfehler, unerwartetes ‘)’, erwartet ‘:’ oder ‘{‘ in. Die Datei, in der ich versuche, diesen Code zu verwenden, ist eine Bbpress-Vorlagendatei, wenn das macht einen unterschied. Ich dachte nur, ich sollte es dich wissen lassen.

    – Allen Payne

    11. März 2013 um 2:25 Uhr


  • vergessen zu erwähnen, dass ich bbp_get_reply_author_id() verwenden muss, um die Bilder für jedes Mitglied in bbpress-Foren anzuzeigen. also glaube ich nicht, dass get_currentuserinfo() funktionieren würde. nicht sicher, bitte korrigiert mich, wenn ich falsch liege.

    – Allen Payne

    11. März 2013 um 2:28 Uhr

  • Tut mir leid, versuche es noch einmal. Ich hatte eine zusätzliche Klammer in meiner Switch-Anweisung. Ich habe den Code bearbeitet und erneut gepostet

    – David Chase

    11. März 2013 um 2:44 Uhr

  • Funktioniert immer noch nicht… Ich erhalte diesen Fehler: Parse-Fehler: Syntaxfehler, unerwartetes T_BREAK…

    – Allen Payne

    11. März 2013 um 3:07 Uhr

  • Wenn Sie schon dabei sind, können Sie mir auch sagen, wie ich get_currentuserinfo(); mit bbp_get_reply_author_id(); den Code in meinen bbpress-Foren anwenden? (siehe meine Antwort oben)

    – Allen Payne

    11. März 2013 um 3:08 Uhr


ICH HABE EINE VIEL EINFACHE LÖSUNG GEFUNDEN:

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

Die Starter- und Premium-Rollen sind benutzerdefinierte Rollen, die ich mit dem User Role Editor-Plugin erstellt habe.

Alles scheint jetzt gut zu funktionieren.

Benutzer-Avatar
Danyo

Ich weiß, das ist ein bisschen spät, aber hier ist meine Lösung, die ich für die kürzeste und effizienteste halte:

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

}

1364580cookie-checkWordPress -> Wenn Rollenabonnent Bild anzeigen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy