filtro get_avatar no WordPress 4.4, como filtrar corretamente

O código antigo no meu plugin substituiu o get_avatar. Parou de trabalhar com o lançamento do WP 4.4, portanto, eu decidi tentar aprender como usar o add_filter .

Existem outras postagens sobre o número de argumentos / parâmetros que estão sendo aprovados , etc. Eu mesmo olhei para os plugins do WordPress no repository que usam add_filter, no entanto, mesmo um arquivo despojado está carregando os $ avatar_defaults em vez da localização do add_filter.

Aqui está a minha versão “despojada” para testar como filtrar o get_avatar. Você verá o método set_avatar deve tentar carregar um test.png, mas está carregando o xenforo_logo.og.png para qualquer conta que não seja Gravatar.

class XenWord_Avatars { public function construct() { $this->hooks(); } public function hooks() { add_filter( 'get_avatar', array( $this, 'set_avatar' ), 10, 5 ); } public function set_avatar( $avatar, $id_or_email, $size, $default, $alt ) { if ( is_admin() ) { $screen = get_current_screen(); if ( is_object($screen) && in_array( $screen->id, array( 'dashboard', 'edit-comments' ) ) && $default == 'mm') { $default = get_option( 'avatar_default', 'mystery' ); } } if ( $default != 'XenForo' ) { return $avatar; } if ( $default == 'XenForo' ) { $newAvatar = plugins_url( '../admin/images/test.png', __FILE__ ); return $newAvatar; } return $avatar; } } $xenword_avatars = new XenWord_Avatars(); /** * Add Custom Avatar (Discussion Settings) * * @param $avatar_defaults * * @return mixed * @throws Zend_Exception */ function xenword_avatar_defaults( $avatar_defaults ) { // Get Avatar from plugin folder $new_avatar = plugins_url( '../admin/images/xenforo_logo.og.png', __FILE__ ); $avatar_defaults[$new_avatar] = "XenForo"; // Remove default avatars //unset ( $avatar_defaults['mystery'] ); //unset ( $avatar_defaults['blank'] ); //unset ( $avatar_defaults['gravatar_default'] ); //unset ( $avatar_defaults['identicon'] ); //unset ( $avatar_defaults['wavatar'] ); //unset ( $avatar_defaults['monsterid'] ); //unset ( $avatar_defaults['retro'] ); return $avatar_defaults; } add_filter( 'avatar_defaults', 'xenword_avatar_defaults' ); 

Alguém pode ver algo obviamente errado com o que é feito no código acima? Depois de descobrir o que está errado, eu posso estender esse método para que ele obtenha o avatar da XenForo com base na conta do usuário.

Solutions Collecting From Web of "filtro get_avatar no WordPress 4.4, como filtrar corretamente"

Espero que isso ajude alguém no futuro.

Número de parameters

Altere o número de parâmetros no método set_avatar para 6. O $ args foi adicionado como o 6º.

Corrija a página opções-discussão.php

Em seguida, a página options-discussion.php não mostrava avatars adequadamente e, portanto, o bloco de código is_admin precisava ser adicionado.

  public function set_avatar( $avatar, $id_or_email, $size = '96', $default = '', $alt = false, $args ) { if ( ! get_option( 'show_avatars' ) ) { return false; } // Properly show Avatars and Gravatars on the options-discussion.php page if ( is_admin() ) { $screen = get_current_screen(); if ( is_object( $screen ) && in_array( $screen->id, array( 'dashboard', 'options-discussion' ) ) && ( $default != 'XenForo' ) ) { return $avatar; } } } 

Depurar em muitos lugares para verificar is_numeric, is_object, etc.

Em seguida, um Zend_debug mostrou $ id_or_email que um object estava sendo retornado e isso ajudou tremendamente. Em cada um dos condicionais, trabalhe para o $ id.

Após o condicional, use o $ id para pegar userinfo e, finalmente, o URL ($ out).

Return $ avatar

O retorno $ avatar é importante, portanto, as linhas de término exigem a configuração de uma url ($ out).

  $avatar = "{$safe_alt}"; return $avatar; 

Espero que isso ajude outros a tentar filtrar avatares em vez de replace o get_avatar.