Hi @prashantvatsh
Thanks for pointing me to the right direction, I noticed the break in the image was caused by this code I made use of;
Please can you assist me in a way to debug and fix this code a little
Reasons being:
The code helps to disable the gravatar use in buddy-press avatar and cover-image while also removing that gravatar text wordings when editing the avatar and cover image
/*Disable gravatar*/
add_filter('bp_core_fetch_avatar_no_grav', '__return_true');
/*Disable gravatar extra function*/
function bp_remove_gravatar ($image, $params, $item_id, $avatar_dir, $css_id, $html_width, $html_height, $avatar_folder_url, $avatar_folder_dir) {
$default = get_stylesheet_directory_uri() .'/_inc/images/bp_default_avatar.jpg';
if( $image && strpos( $image, "gravatar.com" ) ){
return '<img src="' . $default . '" alt="avatar" class="avatar" ' . $html_width . $html_height . ' />';
} else {
return $image;
}
}
add_filter('bp_core_fetch_avatar', 'bp_remove_gravatar', 1, 9 );
function remove_gravatar ($avatar, $id_or_email, $size, $default, $alt) {
$default = get_stylesheet_directory_uri() .'/_inc/images/bp_default_avatar.jpg';
return "<img alt='{$alt}' src='{$default}' class='avatar avatar-{$size} photo avatar-default' height='{$size}' width='{$size}' />";
}
add_filter('get_avatar', 'remove_gravatar', 1, 5);
function bp_remove_signup_gravatar ($image) {
$default = get_stylesheet_directory_uri() .'/_inc/images/bp_default_avatar.jpg';
if( $image && strpos( $image, "gravatar.com" ) ){
return '<img src="' . $default . '" alt="avatar" class="avatar" width="150" height="150" />';
} else {
return $image;
}
}
add_filter('bp_get_signup_avatar', 'bp_remove_signup_gravatar', 1, 1 );
Thanks in advance
Hi,
There is a filter code already written to modify this:
return apply_filters( 'bp_get_activity_avatar', bp_core_fetch_avatar( array(
'item_id' => $item_id,
'object' => $object,
'type' => $type,
'alt' => $alt,
'class' => $class,
'width' => $width,
'height' => $height,
'email' => $email
) ) );
You can use this filter to write your own code to modify the class parameter.
Thanks
I have both Buddypress and bbpress installed. bbpres is using local wordpress avatars that registered users uploaded even before bbpress was installed. I want Buddypress to do the same – use these local avatars instead of its own. I have found this code on bbpress codex and internets:
add_filter('bp_core_fetch_avatar_no_grav', '__return_true');
I added this code to bp-custom.php, but it`s seems like this code is not working anymore? I really need to make Buddypress to use local avatars just like bbpress do, please help.
I apologize if this is something fairly easy but I’m a bit of a beginner when it comes to this stuff. I’m looking to display my Group Mod’s member types above their names on the group page I have created but all I can get is the id to show up which of course is not user friendly when it comes to reading it. I have pasted the code I have below if anyone could please help me with this. Thank You!
function bp_group_list_mods( $group = false ) {
global $groups_template;
if ( empty( $group ) ) {
$group =& $groups_template->group;
}
if ( ! empty( $group->mods ) ) : ?>
<ul id="group-mods">
<?php foreach( (array) $group->mods as $mod ) { ?>
<li id="groupmods-list"><div class="item-avatar">
<a href="<?php echo bp_core_get_user_domain( $mod->user_id, $mod->user_nicename, $mod->user_login ) ?>" class="bp-tooltip" data-bp-tooltip="<?php printf( ('%s'), bp_core_get_user_displayname( $mod->user_id ) ); ?>"><?php echo bp_core_fetch_avatar( array( 'item_id' => $mod->user_id, 'email' => $mod->user_email, 'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ) ) ) ) ?></a></div>
<div class="item">
<div class="groupmod-type"><p><?php printf( ('%s'), bp_get_member_type( $mod->user_id) ); ?></p></div>
<div class="groupmod-name"><p><?php printf( ('%s'), bp_core_get_user_displayname( $mod->user_id ) ); ?><p></div>
</div>
</li>
<?php } ?>
</ul>
Just tested it, create a bp-custom.php in your plugins directory and add the following:
define ( 'BP_AVATAR_DEFAULT', 'http://example.com/default-avatar.jpg' );
define ( 'BP_AVATAR_DEFAULT_THUMB', 'http://example.com/default-avatar-thumb.jpg' );
add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );
Digging into it a bit more, it seems gravatars influences it. You can disable the gravatars like so
add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );
followed by using your original code
define ( 'BP_AVATAR_DEFAULT', 'http://example.com/default-avatar.jpg' );
define ( 'BP_AVATAR_DEFAULT_THUMB', 'http://example.com/default-avatar-thumb.jpg' );
Hi I’m not exactly sure what you mean, but if you’re looking to get the profile image associated with a group or user, you can use the avatar-fetching function that BP uses in its templates, bp_core_fetch_avatar():
https://buddypress.trac.wordpress.org/browser/tags/2.9.3/src/bp-core/bp-core-avatars.php#L99
As an example, you might use
bp_core_fetch_avatar( array(
'item_id' => $user_id,
'type' => 'thumb',
'width' => false,
'height' => false,
'html' => true,
'alt' => sprintf( __( 'Profile picture of %s', 'buddypress' ), 'user name' )
) );
Hi @VentureCore-
It seems like you can make avatars work remotely. Check bp_core_fetch_avatar() for some filter opportunities. https://buddypress.trac.wordpress.org/browser/tags/2.9.2/src/bp-core/bp-core-avatars.php#L98
I’ve not done what you’re trying to do, but it seems that the filter points bp_core_avatar_folder_url, bp_core_avatar_folder_dir could be useful, but there’s a filter on the final result at bp_core_fetch_avatar for the “html” output version and bp_core_fetch_avatar_url for just the url.
Cover images should actually be easier to manage. Take a look in https://buddypress.trac.wordpress.org/browser/tags/2.9.2/src/bp-core/bp-core-attachments.php#L28
Alternatively, you could filter the other plugin to ignore avatar and cover image requests. Lots of ways to solve this, I’d bet.
Hey,
The fix for that is coming in the next release of buddy press. Or at least for the part of the problem.
You most likely get 50% of your problem from these two in my case with 6k users these amounted to the respective query execution times (from new relic), I also run buddypress + rtmedia (which is the source of this problem) as described in this ticket:
bp_friends_prime_mentions_results() – Used by the Activity component’s @mentions to print a JSON list of the current user’s friends.
bp_friends_prime_mentions_results – 10,000+ ms
bp_core_fetch_avatar – 6,000+ ms
Here’s a fix:
https://buddypress.trac.wordpress.org/changeset/11561
You’ll still likely stay with this massive query even for logged out users:
WP_User_Query::query on average right now it’s at around 7,500ms.
Good news is that with HHVM site runs much faster due to object caching straight after enabling it.
I’ve also played around with various hosts, flywheel & wpengine sucked. What works well is Kinsta with HHVM enabled, they can also check your database and help you move to InnoDB if you’re using another one.
Anyway man hope this helps.
Best,
M.
This worked!
adding
add_filter('bp_core_fetch_avatar_no_grav', '__return_true');
this is what my bp-custom looks like now to make it work:
define('BP_DEFAULT_COMPONENT', 'profile' );
define ( 'BP_AVATAR_THUMB_WIDTH', 125 );
define ( 'BP_AVATAR_THUMB_HEIGHT', 125 );
define ( 'BP_AVATAR_FULL_WIDTH', 150 );
define ( 'BP_AVATAR_FULL_HEIGHT', 150 );
add_filter('bp_core_fetch_avatar_no_grav', '__return_true');
define ( 'BP_AVATAR_DEFAULT', 'https://veloXXXXXXXhive.com/wp-content/uploads/2017/06/VeloHive-Default-User-Avatar-150px-x-150px-17Teeth-EVO.png' );
define ( 'BP_AVATAR_DEFAULT_THUMB', 'https://veloXXXXXXhive.com/wp-content/uploads/2017/06/VeloHive-Default-User-Avatar-125px-x-125px-17Teeth-EVO-THUMBNAIL.png' );
Someone should probably update that codex doc
Here’s the code for anyone who wants to do the same:
add_shortcode('course_mentor','group_course_mentor');
function group_course_mentor($atts, $content = null){
if(!is_user_logged_in())
return;
if(!bp_is_active('groups'))
return;
global $wpdb,$bp;
$batches = groups_get_user_groups(get_current_user_id());
$return = '';
if(!empty($batches['groups'] )){
foreach($batches['groups'] as $batch){
$admins = groups_get_group_admins( $batch );
foreach($admins as $admin){
$return .= '<a href="'.bp_core_get_user_domain($admin->user_id).'" title="'. bp_core_get_user_displayname( $admin->user_id, true ) .'">'.bp_core_fetch_avatar ( array( 'item_id' => $admin->user_id, 'type' => 'thumb' ) ) .'</a>';
}
}
}
return $return ;
}
Credit goes to Alex @ WPLMS for this 🙂
Thank you for your response.
I did ask Learndash and they referred me to third party programmers.
Since I am using buddypress groups, I thought it was appropriate to ask here as well. Apologies if I was mistaken!
So would it be something like this:
add_shortcode('course_mentor','nex_course_mentor');
function nex_course_mentor($atts, $content = null){
if(!is_user_logged_in())
return;
if(!bp_is_active('groups'))
return;
$nex_group_id = bp_get_group_id(get_current_user_id());
if(!empty($nex_group_id)){
foreach($nex_group_id as $nex_group_id){
$nex_admins = groups_get_group_admins( $nex_group_id );
foreach($admins as $admin){
?>
<a href="<?php echo bp_core_get_user_domain($admin->user_id) ?>"
title="<?php echo bp_core_get_user_displayname( $admin->user_id, true ) ?>">
<?php echo bp_core_fetch_avatar ( array( 'item_id' => $admin->user_id, 'type' => 'thumb' ) ) ?></a>';
<?php
}
}
}
}
I’m just copy/pasting and trying to connect a bunch of different answers together. As you can tell, I’m no coder.
Since each group may have more than one group leader/mentor I had a loop in there. Hopefully that will get the ball rolling on what I’m trying to do.
Am I on the right track?
define ( ‘BP_AVATAR_DEFAULT_THUMB’, $img_url );
This was not working for me either, in the end this combination did. Turning off gravatar (first filter), and then a default bp image filter.
add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );
add_filter( 'bp_core_default_avatar_user', 'override_default_avatar', 10, 2 );
function override_default_avatar( $default, $params ) {
if ( !empty($params) ) {
if ( 'thumb' == $params['type'] ) {
return get_stylesheet_directory_uri() . '/img/avatar-thumb.jpg';
}
}
return get_stylesheet_directory_uri() . '/img/avatar.jpg';
}
So this doesn’t matter then when update_meta_cache is called twice?
It seems to be calling 2 queries and one of them bp_core_fetch_avatar_filter
It’s just because I’m sure (not 100%) that I’ve never seen this show up until now.
So what you’re looking for is to use a custom user avatar instead of BuddyPress’?
Try the following code snippet in your theme’s functions.php or wp-content/plugins/bp-custom.php:
remove_filter( 'get_avatar', 'bp_core_fetch_avatar_filter', 10, 6 );
Update – That code snippet only reverts the avatar in WordPress posts and comments.
To override BuddyPress avatars in BuddyPress content with a custom avatar solution, you would have to hook into the 'bp_core_fetch_avatar' filter:
https://buddypress.trac.wordpress.org/browser/tags/2.5.3/src/bp-core/bp-core-avatars.php?marks=534-549#L534
You could be using the thumb sized avatar. Check your theme to make sure the full sized image is being used. bp_core_fetch_avatar() is the function used by BuddyPress to display avatars but there’s also get_avatar() so check for that too (it’s a WordPress function).
<?php echo get_avatar( $comment, ’45’ ); ?>
<?php echo bp_core_fetch_avatar( array( ‘item_id’ => $comment->user_id,’type’ => ‘full’,’width’ => 75,’height’ => 75)); ?>
Hi @etavio
Your custom plugin is most likely filtering get_avatar to display your custom images. BuddyPress actually bypasses that filter through the use of bp_core_fetch_avatar().
Ref: https://github.com/buddypress/BuddyPress/blob/master/src/bp-core/bp-core-avatars.php#L192
You will need to use a different filter.
Hi,
default avatar is ‘gravatar’ ‘s mytery man. To use your own avatar, you have to deactivate gravatar in addition to constant. Try this in bp-custom.php
add_filter('bp_core_fetch_avatar_no_grav', '__return_true');
define ( 'BP_AVATAR_DEFAULT_THUMB', 'YOURIMAGEURL' );
I managed to fix the issue.
Apparently BuddyPress does not change the avatar url when get_avatar_data() -function is called. I managed to fix the issue by adding following piece of script to my plugin’s source code:
<?php
add_filter("get_avatar_data", function($args, $id_or_email){
$bp_avatar_url = bp_core_fetch_avatar([
"html" => false,
"item_id" => $id,
"type" => "full",
"width" => $args["size"],
"height" => $args["size"]
]);
$bp_avatar_url = htmlspecialchars_decode($bp_avatar_url);
$args["url"] = $bp_avatar_url;
return $args;
}, 10, 2);
?>
If it’s a BuddyPress page then I guess the bp_core_fetch_avatar() function should display the local avatar if no Grav exists. Are you saying this doesn’t happen?
You could disable Gravatar?
add_filter( 'bp_core_fetch_avatar_no_grav', '__return_true' );
Topic close as result is already formated :
http://hookr.io/functions/bp_core_fetch_avatar/
Usage
$string = bp_core_fetch_avatar( $args );
Parameters
$args
( array|string ) optional – { An array of arguments. All arguments are technically optional; some will, if not provided, be auto-detected by bp_core_fetch_avatar(). This auto-detection is described more below, when discussing specific arguments.
Returns
string Formatted HTML
element, or raw avatar URL based on $html arg.