4

だからここに契約があります..私はWordpress + bbPressをメンバーシップソフトウェア(aMember)と統合しています。

私のbbPressフォーラムでは、人々のユーザー名の下に、すべてのメンバーのWordpressの役割(bbpressの役割ではない)と、すべてのメンバーの役割に応じた画像を表示したいと考えています。

例えば、

ユーザー ロールがサブスクライバーの場合 -> bbpress でユーザー名の下にロールを表示 -> 下の画像も表示します。

Wordpress の役割 (bbpress の役割の代わりに) を表示したい理由は、メンバーシップ ソフトウェア (amember) で、ユーザーのサブスクリプションに応じて異なる wordpress の役割を設定できるためです。私のサイトには 2 つの異なるメンバーシップ プラン (無料と有料) があり、プランに基づいて bbpress フォーラムに異なる画像を表示したいと考えています。

bbPress テンプレートを調べたところ、次のコードが見つかりました (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)

このコードを、すべてのユーザーの Wordpress の役割 (bbpress ではない) を示すコードに置き換え、役割に応じてその下に画像を表示するにはどうすればよいでしょうか。例えば:

役割が「サブスクライバー」の場合 -> 役割とその下の画像を表示

役割が「寄稿者」の場合 -> 役割とその下の画像を表示

役割が「管理者」の場合 -> 役割とその下の画像を表示

私はプログラマーではないので、これを達成する方法がわかりません。助けてください。これを機能させるために使用できると思われる関連コードをいくつか見つけました。

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

失敗した試みは次のようになります。

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

何をしているのかわかりません...上記のコードは、Googleで見つけたものです。

誰でも助けることができますか?

とても感謝しております。

4

3 に答える 3

14

ユーザーがサブスクライバーであるかどうかをテストするには、次のようになります。

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

あなたの場合、複数のユーザーチェックを行いたい場合は、次のようにswitchステートメントを使用します

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

より多くのユーザー ロールで switch ステートメントを続行できます。

編集済み

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

ユーザーのリクエストに基づいて編集

次のコードを使用して、ユーザー名、アバター、ポイント、および画像を取得するすべてのコードを置き換えます。

関数にこれを配置します

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

上記//の前を削除しますecho

テンプレート内に次を配置します

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

ロールとイメージをさらに追加するには、サブスクライバーの後に新しい配列を追加するだけです

于 2013-03-11T01:44:11.013 に答える
1

私ははるかに簡単な解決策を見つけました:

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

スターター ロールとプレミアム ロールは、User Role Editor プラグインを使用して作成したカスタム ロールです。

今はすべてうまくいっているようです。

于 2013-03-11T16:34:39.943 に答える
0

私はこれが少し遅れていることを知っていますが、これが最短で最も効率的であると私が信じている私の解決策です:

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

}
于 2014-07-29T13:40:33.550 に答える