web-dev-qa-db-fra.com

Comment filtrer get_avatar?

Je souhaite utiliser le système d'avatar local pour mon site Web wp. Je souhaite filtrer la fonction get_avatar() afin de renvoyer l'avatar de mon serveur à la place du gavatar par défaut.

J'ai le code suivant :

class local_avatar{

        function __construct(){
            add_filter('get_avatar',array($this,'get_avatar'));
        }

        public function get_avatar($avatar , $id_or_email , $size = '96'  , $default , $alt = false){

            global $wpdb;
            $upload = wp_upload_dir();

            if(is_numeric($id_or_email)){
                // the user id
                $image = get_user_meta($id_or_email,'_ahaali_avatar',true);
                if($image){
                    $image_path = $upload['baseurl'].'/avatar/'.$image;
                    $ahaali_avatar = '<img src="'.$image_path.'" width="'.$size.'" height="'.$size.'" />';
                }else{
                    $image_path = 'http://0.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s='.$size;
                    $ahaali_avatar = '<img src="'.$image_path.'" width="'.$size.'" height="'.$size.'" />';
                }
            }elseif(is_string($id_or_email)){
                // the user email
                $user_id = $wpdb->get_var($wpdb->prepare("SELECT ID FROM wp_users WHERE user_email = %s",
                $id_or_email));
                $image = get_user_meta($user_id,'_ahaali_avatar',true);
                if($image){
                    $image_path = $upload['baseurl'].'/avatar/'.$image;
                    $ahaali_avatar = '<img src="'.$image_path.'" width="'.$size.'" height="'.$size.'" />';
                }else{
                    $image_path = 'http://0.gravatar.com/avatar/ad516503a11cd5ca435acc9bb6523536?s='.$size;
                    $ahaali_avatar = '<img src="'.$image_path.'" width="'.$size.'" height="'.$size.'" />';
                }
            }
            return $ahaali_avatar;
        }

    }

Et cela retourne les erreurs suivantes:

Avertissement: Argument 2 manquant pour local_avatar :: get_avatar () dans /home/subhi/public_html/work/example.com/wp-content/plugins/ahaali_avatar/core.php à la ligne 40

Avertissement: Argument 4 manquant pour local_avatar :: get_avatar () dans /home/subhi/public_html/work/example.com/wp-content/plugins/ahaali_avatar/core.php à la ligne 40

Comment puis-je résoudre ça?

3
Paul Dumitru

La paire priority, parameters manquait lors de la déclaration du crochet de filtre:

add_filter( 'get_avatar', array( $this, 'get_avatar' ), 10, 5 );

Étant 5 tous les paramètres que la fonction de rappel peut utiliser:

public function get_avatar( $avatar, $id_or_email, $size, $default, $alt )
{
    return $avatar;
}
3
brasofilo

Vous pouvez facilement ajouter de nouveaux avatars avec cette fonction:

 // Custom Default Avatar
 if ( !function_exists('addgravatar') ) {
   function addgravatar( $avatar_defaults ) {
     $myavatar = get_bloginfo('template_directory').'/images/custom-gravatar.jpg'; 

     // Change path to your custom avatar
     $avatar_defaults[$myavatar] = 'Custom Avatar'; 

     // Change to your avatar name
        return $avatar_defaults;
   }
   add_filter( 'avatar_defaults', 'addgravatar' );
 }

Dans la zone d'administration, allez dans les onglets Paramètres -> Discussion, sélectionnez votre nouvel avatar par défaut et cliquez sur Enregistrer.

1
Pontus Abrahamsson