web-dev-qa-db-fra.com

Amélioration du système de badges "inspiré" de Stackoverflow pour afficher les badges dans la page de l'auteur

J'ai modifié un projet de plugin abandonné depuis longtemps qui fournit un système de badge inspiré de Stackoverflow pour Wordpress. J'ai mis à jour une partie de son code afin qu'il fonctionne avec la nouvelle version de Wordpress.

Veuillez visualiser le code du plugin ici: http://Pastebin.com/kCWWLPL2

Le problème est que le code d'origine ne permettait pas de faire écho aux badges attribués à l'utilisateur. Actuellement, il existe un moyen d'afficher les badges: <?php rhb_list_badges() ?> Cette fonction répertorie tous les badges du système.

Je veux modifier le code afin qu'en ajoutant une fonction à la page author.php de Wordpress, , il liste les badges attribués à l'utilisateur . Cependant, ma connaissance de PHP est très limitée et je me suis heurté à un mur.

On m'a dit que cela pourrait fonctionner:

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

Mais tout ce qu’il a fait est de répertorier tous les badges et non pas , mais seulement ceux attribués à l’utilisateur. Peut-être qu'il manque quelque chose dans le code ci-dessus? Je suis certain qu'il doit y avoir un moyen d'accomplir cela. Savez-vous comment?

Mise à jour: Si nous regardons dans le code d'origine, nous pouvons voir qu'il existe un filtre déjà en place:

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

Comment pourrais-je m'y prendre?

2
Amanda Bynes

get_current_user_id (); obtient l'ID utilisateur actuellement connecté et vous avez besoin de l'utilisateur qui est profileUrl; visualisez-le. Essayez donc de l'installer pour obtenir le bon identifiant:

$author = get_user_by( 'slug', get_query_var( 'author_name' ) ); 
echo $author->ID;'

oui, alors au lieu de votre code, essayez ceci:

$author = get_user_by( 'slug', get_query_var( 'author_name' ) ); 
if ($author->ID > 0) {
  rhb_list_badges(array('user_ID' => $author->ID));
}
0
Bainternet