web-dev-qa-db-ja.com

BuddyPressでメンバーのアバターを上書きする方法

私はBPアバターを上書きするためにあらゆることを試みました。基本的にすべてが同じ解決策を指している約5〜6の異なるGoogleの結果が見つかりました。

function override_bp_member_avatar($url) {
    return get_stylesheet_directory_uri() . '/default_avatar.png';
}
add_filter('bp_core_fetch_avatar_no_grav', '__return_true'); // http://codex.buddypress.org/extending-buddypress/tips-tricks/
add_filter('bp_core_mysteryman_src', 'override_bp_member_avatar'); // http://www.buddyboss.com/instructions/

それでもうまくいきません。

メンバーにデフォルトのアバターを使用して成功した人はいますか?

3
user11948

引用するフィルターは、デフォルト/フォールバックアバター専用です。 BPアバターを完全に置き換える場合、キーフィルターはbp_core_fetch_avatarbp_core_fetch_avatar_urlです。後者はHTMLアバター要素全体をフィルタリングし、後者はURLのみをフィルタリングします。

どのようにフィルタリングを行うかは、取得したい空想によって異なります。 bp_core_fetch_avatarは、アバターHTMLを完全に再構築する場合、多くの便利なパラメーターを渡します。 https://buddypress.trac.wordpress.org/browser/tags/1.5.5/bp- core/bp-core-avatars.php#L297 それ以外の場合は、簡単な修正のために、preg_replace() URLのみを使用できます。

/**
 * This function returns your new avatar URL. You can put whatever logic in here you want
 */
function wpse_49216_my_new_avatar_url() {
    return 'http://example.com/avatar.jpg';
}
add_filter( 'bp_core_fetch_avatar_url', 'wpse_49216_my_new_avatar_url' );

function wpse_49216_filter_bp_avatar( $html ) {
    return preg_replace( '/src=".+?"/', 'src="' . wpse_49216_my_new_avatar_url() . '"', $html );
}
add_filter( 'bp_core_fetch_avatar', 'wpse_49216_filter_bp_avatar' );

編集:上記の方法は、すべてのアバターを置き換えます。デフォルト/フォールバックアバターのみを変更する場合(自分自身をアップロードしていないユーザー向け)、試してください

/**
 * Disable Gravatar throughout BP
 */
add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );

/**
 * Provide a global user avatar default
 */
function wpse_49216_my_new_default_avatar_url() {
    return 'http://example.com/avatar.jpg';
}
add_filter( 'bp_core_default_avatar_user', 'wpse_49216_my_new_default_avatar_url' );
2
Boone Gorges