web-dev-qa-db-fra.com

Définir un avatar par défaut sur l'ensemble du réseau

J'ai vu des plugins et des extraits sur la façon de définir un nouvel avatar par défaut pour un site. Je me demande si cela peut être fait à l'échelle du réseau, de manière à ce que chaque nouveau site sur le réseau ait l'avatar du réseau par défaut. à partir de là, les plugins permettant à l'utilisateur de télécharger un nouvel avatar seront suffisants pour permettre à chaque site de définir le sien. Mais en attendant, je préférerais qu'ils aient mon avatar plutôt que le mystérieux ou certains des autres qui sont vraiment laids.

5
helgatheviking

Dans mon dossier mu-plugins, j'ai maintenant le code suivant, qui ajoute un avatar personnalisé au réseau par défaut, mais permet à chaque site de le modifier par la suite.

<?php
  /*
    Plugin Name: Network Default Avatar
    Description:  This Plugin sets the default avatar network-wide
    */

    class Network_Default_Avatars {

    // configure these two variables
    static $name = "Network Default";  // text description of avatar... ie "Mystery Man"
    static $avatar = "http://example.com/default-avatar.png";  // URL of avatar

    function __construct() {

        // default avatar
        add_filter( 'avatar_defaults', array( $this, 'default_avatar' ) );  
        add_action( 'wpmu_new_blog', array( $this, 'new_blog_default_avatar' ) );

    }
    // add to list of default avatars
    function default_avatar ($avatar_defaults) {  
        $ib_avatar[self::$avatar] = self::$name;  
        return array_merge( $ib_avatar,$avatar_defaults ); // Put our custom avatar on top
    }

    // set a new blog to have the default avatar
    function new_blog_default_avatar( $blog_id ){
        switch_to_blog($blog_id);
        update_option( 'avatar_default', esc_url( self::$avatar ) );
        restore_current_blog();
    }

}

new Network_Default_Avatars();

EDIT # 1 Commentaire de Per @ Otto à propos du default_option_avatar_default_filter J'ai changé l'action du nouveau blog update_option pour utiliser plutôt le filtre par défaut.

<?php
  /*
    Plugin Name: Network Default Avatar
    Description:  This Plugin sets the default avatar network-wide
    */

    class Network_Default_Avatars {

    // configure these two variables
    static $name = "Network Default";  // text description of avatar... ie "Mystery Man"
    static $avatar = "http://example.com/default-avatar.png";  // URL of avatar

    function __construct() {

        // default avatar
        add_filter( 'avatar_defaults', array( $this, 'avatar_defaults' ) );  
        add_filter( 'default_option_avatar_default', array( $this, 'default_avatar' ) ); 

    }

    // add to list of default avatars
    function avatar_defaults ($avatar_defaults) {  
        $ib_avatar[self::$avatar] = self::$name;  
        return array_merge( $ib_avatar,$avatar_defaults ); // Put our custom avatars on top
    }


    function default_avatar () {  
        return self::$avatar; 
    }

}

new Network_Default_Avatars();
2
helgatheviking

Avatar_default est la meilleure option.

add_filter('pre_option_avatar_default', 'se72578_avatar_default');
function se72578_avatar_default( $option ){
   return 'http://example.com/your/default/here.jpg';
}

Simple. Collez-le dans un plug-in mu et vous êtes prêt à partir.

Modifier: si vous souhaitez toujours autoriser les propriétaires de site à modifier l'avatar par défaut, utilisez plutôt le crochet default_option_avatar_default.

6
Otto

Doit utiliser des plugins sera une fonctionnalité globale. Et la fonctionnalité actuelle est assez simple ... ne fait que préfiltrerdefault_avatarvalue.

Utilisez ce code comme plugin que vous pouvez installer sur un avatar par défaut.

<?php
    /*
    Plugin Name: Network Default Avatar
    Description:  This Plugin Used to be the General Framework
    Author: 
    Version: 
    Author URI:
    */

    add_filter('pre_option_avatar_default', 'pre_option_avatar_default');
    function pre_option_avatar_default(){
        return 'mystery';
    }

UpdateNouveau code

  1. À l'aide du crochet de filtrage get_avatar, vous pouvez remplacer l'avatar d'origine.

    add_filter('get_avatar', 'get_avatar_custom',10,5);
    function get_avatar_custom($avatar, $id_or_email, $size, $default, $alt){
       // your code here...
          /*
          ** Example code will check if current avatar string is contain "mystery" avatar if yes, it will 
          ** try to get site_default_avatar property from options table (you can create a UI for entering this value)
          ** if system_default_avatar exists - filter will repalce default value (first argument of this filter callback)
          ** and return new value
          ** if (strpos($avatar, '561e2e7a9910204ba43fa4097e45c5e9') !== false 
          **    && get_option('site_default_avatar', false) != ''){
          **    $avatar =  "<img alt='".esc_attr($alt)."' src='".get_option('site_default_avatar', false)."' 
          **        class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
          ** } 
          **
          */
        return $avatar;
    }
    
  2. Utiliser une fonction ... get_avatar. get avatar est une fonction plugable, ce qui signifie que vous pouvez le modifier dans n'importe quel plugin, thème ou dans notre cas dans mu-plugin

    function get_avatar( $id_or_email, $size = '96', $default = '', $alt = false {
       // your code here
       return $some_html_with_avatar_picture; 
    }
    
5
Butuzov