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