WordPress 4.4中的Get_Avata过滤器,如何正确过滤

时间:2016-01-06 作者:LPH

我插件中的旧代码替换了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获取头像。

1 个回复
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头像。

相关推荐