改进Stackoverflow“灵感”徽章系统以在作者页面中显示徽章

时间:2012-08-23 作者:Amanda Bynes

我一直在修改一个长期废弃的插件项目,该项目为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>\';
                        }
                        ;
}
我将如何使用它?

1 个回复
最合适的回答,由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));
}

结束

相关推荐

将PHP处理程序更改为DSO-奇怪的自定义字段问题

我的网站有问题。主页列出了分类的文章(外部链接),还提到了文章来源(文章发布的网站)。这些源是我在wordpress post编辑器中填充的自定义字段。问题是,现在每篇文章都显示了相同的来源,而我为每篇文章提到了不同的来源。自从我将PHP处理程序更改为DSO以来,奇怪的事情一直在发生。问题发生在我更换处理程序之后,所以我很怀疑这是否与此相关。您是否看到了解决此问题的方法?谢谢