Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ipokkel/15fabddd31fa593d4fa63d78f127d5bc to your computer and use it in GitHub Desktop.
Save ipokkel/15fabddd31fa593d4fa63d78f127d5bc to your computer and use it in GitHub Desktop.
Allow members to upload their avatar using a Register Helper field during checkout or on the Member Profile Edit page.
<?php
/*
* Allow members to upload their avatar using a Register Helper field during checkout or on the Member Profile Edit page.
*
* Requires: Paid Memberships Pro, Register Helper Add On.
*
* You can add this recipe to your site by creating a custom plugin
* or using the Code Snippets plugin available for free in the WordPress repository.
* Read this companion article for step-by-step directions on either method.
* https://www.paidmembershipspro.com/create-a-plugin-for-pmpro-customizations/
*/
// Filter the saved or updated User Avatar meta field value and add the image to the Media Library.
function my_updated_user_avatar_user_meta( $meta_id, $user_id, $meta_key, $meta_value ) {
// Change user_avatar to your Register Helper file upload name.
if ( 'user_avatar' === $meta_key ) {
$user_info = get_userdata( $user_id );
$filename = $meta_value['fullpath'];
$filetype = wp_check_filetype( basename( $filename ), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'post_mime_type' => $filetype['type'],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
'post_status' => 'inherit',
);
$attach_id = wp_insert_attachment( $attachment, $filename );
// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
require_once ABSPATH . 'wp-admin/includes/image.php';
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
update_user_meta( $user_id, 'wp_user_avatar', $attach_id );
}
}
add_action( 'added_user_meta', 'my_updated_user_avatar_user_meta', 10, 4 );
add_action( 'updated_user_meta', 'my_updated_user_avatar_user_meta', 10, 4 );
// Filter the display of the the get_avatar function to use our local avatar.
function my_user_avatar_filter( $avatar, $id_or_email, $size, $default, $alt ) {
$user_id = false;
$my_user = false;
if ( is_email( $id_or_email ) ) {
$user_id = get_user_by( 'email', $id_or_email )->ID;
$my_user = get_userdata( $user_id );
} elseif ( is_numeric( $id_or_email ) ) {
$my_user = get_userdata( $id_or_email );
} elseif ( is_object( $id_or_email ) && isset( $id_or_email->comment_ID ) ) {
$my_user = $id_or_email->user_id ? get_userdata( $id_or_email->user_id ) : false;
} elseif ( is_object( $id_or_email ) ) {
$my_user = $id_or_email;
}
if ( ! empty( $my_user ) ) {
$avatar_id = get_user_meta( $my_user->ID, 'wp_user_avatar', true );
if ( ! empty( $avatar_id ) ) {
$avatar = wp_get_attachment_url( $avatar_id, $size );
$avatar = "<img alt='{$alt}' src='{$avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
}
}
return $avatar;
}
add_filter( 'get_avatar', 'my_user_avatar_filter', 20, 5 );
// Add the User Avatar field at checkout and on the profile edit forms.
function my_pmprorh_init_user_avatar() {
//don't break if Register Helper is not loaded
if ( ! function_exists( 'pmprorh_add_registration_field' ) ) {
return false;
}
//define the fields
$fields = array();
$fields[] = new PMProRH_Field(
'user_avatar', // input name, will also be used as meta key
'file', // type of field
array(
'label' => 'Avatar',
'hint' => 'Recommended size is 100px X 100px',
'profile' => true, // show in user profile
'preview' => true, // show a preview-sized version of the image
'addmember' => true,
'allow_delete' => true,
)
);
//add the fields into a new checkout_boxes are of the checkout page
foreach ( $fields as $field ) {
pmprorh_add_registration_field(
'checkout_boxes', // location on checkout page
$field // PMProRH_Field object
);
}
}
add_action( 'init', 'my_pmprorh_init_user_avatar' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment