web-dev-qa-db-ja.com

ネットワーク全体にデフォルトのアバターを設定する

サイトに新しいデフォルトのアバターを設定する方法についてのプラグインとスニペットを見ました。私は、ネットワーク上のすべての新しいサイトがネットワークのアバターをデフォルトにするように、ネットワーク全体でこれを実行できるかどうか考えています。そこからユーザーが新しいアバターをアップロードすることを可能にするプラグインは各サイトがそれ自身を定義させるのに十分でしょう。しかし彼らがやるまで、私は彼らに私のアバターが謎の男や実に醜い他の人よりも持っているほうがいいと思います。

5
helgatheviking

私のmu-pluginsフォルダには、次のようなコードがあります。これにより、カスタムアバターがデフォルトのネットワーク全体として追加されますが、それ以降は個々のサイトで変更できます。

<?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();

編集#1default_option_avatar_default_filterに関する@ Ottoのコメント新しいブログのupdate_optionアクションを代わりにデフォルトのフィルタを使うように変更しました。

<?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がより良い選択肢です。

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

簡単です。 mu-pluginにそれを貼り付けてください。

編集:それでもサイトの所有者にデフォルトのアバターの変更を許可したい場合は、代わりにdefault_option_avatar_defaultフックを使用してください。

6
Otto

プラグインを使用する必要があります グローバルに機能します。そして実際の機能は非常に簡単です... prefiltringdefault_avatarの値だけです。

このコードをプラグインとして使用すると、デフォルトのアバターにインストールできます。

<?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';
    }

更新新しいコード

  1. Get_avatarフィルタフックを使用すると、元のアバターを置き換えることができます

    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. ... get_avatar関数を使用してください。アバターの取得はプラグイン可能な機能です。つまり、すべてのプラグイン、テーマ、またはmu-pluginの場合は無効にできます。

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