我一直在修改一个长期废弃的插件项目,该项目为Wordpress提供了一个Stackoverflow启发的徽章系统。我已经升级了它的一些代码,因此它可以在新的Wordpress版本中运行。
请在此处查看插件代码:http://pastebin.com/kCWWLPL2
问题是,原始代码没有提供一种方法来回应用户获得的徽章。目前,有一种显示徽章的方式:<?php rhb_list_badges() ?>
此功能将列出系统中的每个徽章。
我想修改代码,以便通过向作者添加函数。Wordpress的php页面,it will list the user\'s awarded badges. 然而,我的PHP知识非常有限,我遇到了困难。
我被告知这可能有用:
<?php
$user_id = get_current_user_id();
if ($user_id != 0) {
rhb_list_badges(array(\'user_ID\' => $user_id));
}
?>
但它所做的只是列出所有的徽章,而不是仅仅列出授予用户的徽章。也许上面的代码中缺少什么?我确信一定有办法做到这一点。你知道怎么做吗?
Update: 如果查看原始代码,我们可以看到已有一个过滤器:
function rhb_get_badges( $filter = \'\' ) {
global $wpdb;
if ( empty($filter ) ) { $filter = array(); }
// Select all rows by default
$sql = \'SELECT badge_id, name, description, type FROM \' . $wpdb->prefix . \'rh_badges b WHERE 1=1 \';
// If a user ID was entered.
if ( array_key_exists(\'user_ID\', $filter) ) {
$user_ID = $filter[\'user_ID\'];
// Join the rh_user_badges table.
$sql = \'SELECT b.badge_id, b.name, b.description, b.type
FROM \' . $wpdb->prefix . \'rh_badges b,
\' . $wpdb->prefix . \'rh_user_badges ub
WHERE b.badge_id = ub.badge_id
AND ub.user_id = \' . $user_ID;
}
// If a badge ID was entered.
if ( array_key_exists(\'badge_ID\', $filter) ) {
$badge_ID = $filter[\'badge_ID\'];
// Append a WHERE clause to the SQL.
$sql .= " AND b.badge_id = $badge_ID";
}
$badges = $wpdb->get_results( $sql );
return $badges;
}
function rhb_list_badges( $filter = \'\' ) {
if ( empty($filter ) ) { $filter = array(); }
print \'\';
foreach (rhb_get_badges( $filter ) as $badge) {
print \'<div class="biobadge"><div class="\';
if ( \'gold\' == $badge->type )
echo \'bgold\';
elseif ( \'silver\' == $badge->type )
echo \'bsilver\';
elseif ( \'bronze\' == $badge->type )
echo \'bbronze\';
print \'"></div>
\' . $badge->name . \'
</div>\';
}
;
}
我将如何使用它?
最合适的回答,由SO网友:Bainternet 整理而成
get\\u current\\u user\\u id();获取当前登录的用户id,并且您需要查看其profileUrl的用户,因此请尝试此操作以获取正确的id:
$author = get_user_by( \'slug\', get_query_var( \'author_name\' ) );
echo $author->ID;\'
是的,所以不要使用代码,而是尝试以下操作:
$author = get_user_by( \'slug\', get_query_var( \'author_name\' ) );
if ($author->ID > 0) {
rhb_list_badges(array(\'user_ID\' => $author->ID));
}