web-dev-qa-db-ja.com

作成者ページにバッジを表示するためのStackoverflowの「インスピレーションを得た」バッジシステムの改善

私はWordpressのためのStackoverflow風のバッジシステムを提供する長い放棄されたプラグインプロジェクトを修正しています。新しいWordpressバージョンでも機能するように、コードの一部をアップグレードしました。

ここでプラグインコードを見てください: http://Pastebin.com/kCWWLPL2

問題は、元のコードがユーザーに与えられたバッジを反映する方法を提供していなかったことです。現在、バッジを表示する方法があります。<?php rhb_list_badges() ?>この関数は、システム内のすべてのバッジを一覧表示します。

Wordpressのauthor.phpページに関数を追加することで、ユーザーに付与されたバッジをリストするようにコードを修正したいしかし、私のPHPに関する知識は非常に限られており、壁に突き当たっています。

私はこれがうまくいくかもしれないと言われました:

<?php
$user_id = get_current_user_id();
if ($user_id != 0) {
  rhb_list_badges(array('user_ID' => $user_id));
}
?>

しかし、それはすべてのバッジを一覧表示することであり、ユーザーに授与されたものではありませんjust。上記のコードに何か足りないのでしょうか。私はこれを達成する方法がなければならないと確信しています。どのようにするか知っていますか?

更新:元のコードを見ると、フィルタが既に配置されていることがわかります。

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

どのように使用しますか?

2
Amanda Bynes

get_current_user_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));
}
0
Bainternet