我插件中的旧代码替换了get\\u头像。它停止了与WP 4.4版本的合作,因此,我决定尝试learn how to use add_filter 相反
有other posts discussing the number of arguments / parameters being passed, 等等。我甚至查看了存储库中使用add\\u过滤器的WordPress插件,然而,即使是精简的文件也只加载$avatar\\u默认值,而不是add\\u过滤器位置。
这是我的“精简版”,测试如何过滤get\\u头像。您将看到set\\u avatar应尝试加载测试的方法。png,但正在加载xenforo\\u徽标。og。png适用于任何非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\' );
有人能看到上面代码中所做的有什么明显的错误吗?一旦我找出了问题所在,我就可以扩展此方法,以便它根据用户帐户从XenForo获取头像。
SO网友:LPH
希望这能在将来帮助其他人。
参数数量
将set\\u avatar方法中的参数数量更改为6。$args被添加为第6个。
修复选项讨论。php页面下一步,选项讨论。php页面没有正确显示头像,因此需要添加is\\U管理代码块。
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;
}
}
}
在许多地方进行调试以检查is\\u numeric、is\\u object等。接下来,Zend\\u调试显示返回了$id\\u或\\u电子邮件对象,这非常有帮助。在每个条件中,使用$id。
在条件之后,使用$id获取用户信息,最终获取URL($)。
Return$avatar
Return$avatar很重要,因此,结束行需要设置url($out)。
$avatar = "<img alt=\'{$safe_alt}\' src=\'{$out}\' class=\'avatar avatar-{$size} photo\' height=\'{$size}\' width=\'{$size}\' />";
return $avatar;
我希望这能帮助其他人过滤头像,而不是取代get\\u头像。