Melhorando um sistema de crachás “inspirado” de Stackoverflow para exibir emblemas na página do autor

Eu tenho modificado um projeto de plugin abandonado há muito tempo que fornece um sistema de crachá inspirado no Stackoverflow para o WordPress. Eu atualizei um pouco do seu código para que ele funcione com a nova versão do WordPress.

Veja o código do plugin aqui: http://pastebin.com/kCWWLPL2

O problema é que o código original não forneceu uma maneira de ecoar os crachás que o usuário recebeu. Atualmente, há uma maneira de exibir os emblemas: Esta function listará todos os crachás no sistema.

Eu quero modificar o código para que ao adicionar uma function à página author.php do WordPress, ele irá listar os crachás premiados do usuário . No entanto, meu conhecimento do PHP é muito limitado e acertei um muro.

Foi-me dito que isso poderia funcionar:

  $user_id)); } ?> 

Mas tudo o que fez foi listar todos os crachás e não apenas os premiados para o usuário. Talvez algo esteja faltando no código acima? Estou certo de que deve haver uma maneira de conseguir isso. Você sabe como?

Atualização: se olharmos no código original, podemos ver que já existe um filtro no local:

 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 '
type ) echo 'bgold'; elseif ( 'silver' == $badge->type ) echo 'bsilver'; elseif ( 'bronze' == $badge->type ) echo 'bbronze'; print '">
' . $badge->name . '
'; } ; }

Como eu iria prestes a usá-lo?

Solutions Collecting From Web of "Melhorando um sistema de crachás “inspirado” de Stackoverflow para exibir emblemas na página do autor"

get_current_user_id (); obtém o ID de usuário conectado no momento e você precisa do usuário whos profileUrl é exibido, então tente este insted para obter o id correcto:

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

sim, então, em vez de seu código, tente isso:

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