313 lines
11 KiB
PHP
313 lines
11 KiB
PHP
|
<?php
|
||
|
/*
|
||
|
Plugin Name: Custom User Profile Photo
|
||
|
Plugin URI: http://vincentlistrani.com
|
||
|
Description: A simple and effective custom WordPress user profile photo plugin. This plugin leverages the WordPress
|
||
|
Media Uploader functionality. To use this plugin go to the users tab and select a user. The new field can be found
|
||
|
below the password fields for that user.
|
||
|
Author: VincentListrani
|
||
|
Author URI: http://vincentlistrani.com
|
||
|
Text Domain: custom-user-profile-photo
|
||
|
Domain Path: /languages/
|
||
|
Version: 0.5.3
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* This program has been developed for use with the WordPress Software.
|
||
|
*
|
||
|
* It is distributed as free software with the intent that it will be
|
||
|
* useful and does not ship with any WARRANTY.
|
||
|
*
|
||
|
* USAGE
|
||
|
* // Default:
|
||
|
* This will override the WordPress get_avatar hook
|
||
|
*
|
||
|
* // Custom placement:
|
||
|
* <?php $imgURL = get_cupp_meta( $user_id, $size ); ?>
|
||
|
* or
|
||
|
* <img src="<?php echo get_cupp_meta( $user_id, $size ); ?>">
|
||
|
*
|
||
|
* Beginner WordPress template editing skill required. Place the above tag in your template and provide the two
|
||
|
* parameters.
|
||
|
*
|
||
|
* @param WP_User|int $user_id Default: $post->post_author. Will accept any valid user ID passed into this parameter.
|
||
|
* @param string $size Default: 'thumbnail'. Accepts all default WordPress sizes and any custom sizes made by
|
||
|
* the add_image_size() function.
|
||
|
*
|
||
|
* @return {url} Use this inside the src attribute of an image tag or where you need to call the image url.
|
||
|
*
|
||
|
* Inquiries, suggestions and feedback can be sent to support@3five.com
|
||
|
*
|
||
|
* This is plugin is intended for Author, Editor and Admin role post/page authors. Thank you for downloading our
|
||
|
* plugin.
|
||
|
*
|
||
|
* We hope this WordPress plugin meets your needs.
|
||
|
*
|
||
|
* Happy coding!
|
||
|
* - 3five
|
||
|
*
|
||
|
* Resources:
|
||
|
* • Steven Slack - http://s2web.staging.wpengine.com/226/
|
||
|
* • Pippin Williamson - https://gist.github.com/pippinsplugins/29bebb740e09e395dc06
|
||
|
* • Mike Jolley - https://gist.github.com/mikejolley/3a3b366cb62661727263#file-gistfile1-php
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Load Translations.
|
||
|
*/
|
||
|
function cupp_load_plugin_textdomain() {
|
||
|
load_plugin_textdomain( 'custom-user-profile-photo', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
|
||
|
}
|
||
|
|
||
|
add_action( 'init', 'cupp_load_plugin_textdomain' );
|
||
|
|
||
|
/**
|
||
|
* Enqueue scripts and styles
|
||
|
*/
|
||
|
function cupp_enqueue_scripts_styles() {
|
||
|
// Register.
|
||
|
wp_register_style( 'cupp_admin_css', plugins_url( 'custom-user-profile-photo/css/styles.css' ), false, '1.0.0', 'all' );
|
||
|
wp_register_script( 'cupp_admin_js', plugins_url( 'custom-user-profile-photo/js/scripts.js' ), array( 'jquery' ), '1.0.0', true );
|
||
|
|
||
|
// Enqueue.
|
||
|
wp_enqueue_style( 'cupp_admin_css' );
|
||
|
wp_enqueue_script( 'cupp_admin_js' );
|
||
|
}
|
||
|
|
||
|
add_action( 'admin_enqueue_scripts', 'cupp_enqueue_scripts_styles' );
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Show the new image field in the user profile page.
|
||
|
*
|
||
|
* @param object $user User object.
|
||
|
*/
|
||
|
function cupp_profile_img_fields( $user ) {
|
||
|
if ( ! current_user_can( 'upload_files' ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// vars
|
||
|
$url = get_the_author_meta( 'cupp_meta', $user->ID );
|
||
|
$upload_url = get_the_author_meta( 'cupp_upload_meta', $user->ID );
|
||
|
$upload_edit_url = get_the_author_meta( 'cupp_upload_edit_meta', $user->ID );
|
||
|
$button_text = $upload_url ? 'Change Current Image' : 'Upload New Image';
|
||
|
|
||
|
if ( $upload_url ) {
|
||
|
$upload_edit_url = get_site_url() . $upload_edit_url;
|
||
|
}
|
||
|
?>
|
||
|
|
||
|
<div id="cupp_container">
|
||
|
<h3><?php _e( 'Custom User Profile Photo', 'custom-user-profile-photo' ); ?></h3>
|
||
|
|
||
|
<table class="form-table">
|
||
|
<tr>
|
||
|
<th><label for="cupp_meta"><?php _e( 'Profile Photo', 'custom-user-profile-photo' ); ?></label></th>
|
||
|
<td>
|
||
|
<!-- Outputs the image after save -->
|
||
|
<div id="current_img">
|
||
|
<?php if ( $upload_url ): ?>
|
||
|
<img class="cupp-current-img" src="<?php echo esc_url( $upload_url ); ?>"/>
|
||
|
|
||
|
<div class="edit_options uploaded">
|
||
|
<a class="remove_img">
|
||
|
<span><?php _e( 'Remove', 'custom-user-profile-photo' ); ?></span>
|
||
|
</a>
|
||
|
|
||
|
<a class="edit_img" href="<?php echo esc_url( $upload_edit_url ); ?>" target="_blank">
|
||
|
<span><?php _e( 'Edit', 'custom-user-profile-photo' ); ?></span>
|
||
|
</a>
|
||
|
</div>
|
||
|
<?php elseif ( $url ) : ?>
|
||
|
<img class="cupp-current-img" src="<?php echo esc_url( $url ); ?>"/>
|
||
|
<div class="edit_options single">
|
||
|
<a class="remove_img">
|
||
|
<span><?php _e( 'Remove', 'custom-user-profile-photo' ); ?></span>
|
||
|
</a>
|
||
|
</div>
|
||
|
<?php else : ?>
|
||
|
<img class="cupp-current-img placeholder"
|
||
|
src="<?php echo esc_url( plugins_url( 'custom-user-profile-photo/img/placeholder.gif' ) ); ?>"/>
|
||
|
<?php endif; ?>
|
||
|
</div>
|
||
|
|
||
|
<!-- Select an option: Upload to WPMU or External URL -->
|
||
|
<div id="cupp_options">
|
||
|
<input type="radio" id="upload_option" name="img_option" value="upload" class="tog" checked>
|
||
|
<label
|
||
|
for="upload_option"><?php _e( 'Upload New Image', 'custom-user-profile-photo' ); ?></label><br>
|
||
|
|
||
|
<input type="radio" id="external_option" name="img_option" value="external" class="tog">
|
||
|
<label
|
||
|
for="external_option"><?php _e( 'Use External URL', 'custom-user-profile-photo' ); ?></label><br>
|
||
|
</div>
|
||
|
|
||
|
<!-- Hold the value here if this is a WPMU image -->
|
||
|
<div id="cupp_upload">
|
||
|
<input class="hidden" type="hidden" name="cupp_placeholder_meta" id="cupp_placeholder_meta"
|
||
|
value="<?php echo esc_url( plugins_url( 'custom-user-profile-photo/img/placeholder.gif' ) ); ?>"/>
|
||
|
<input class="hidden" type="hidden" name="cupp_upload_meta" id="cupp_upload_meta"
|
||
|
value="<?php echo esc_url_raw( $upload_url ); ?>"/>
|
||
|
<input class="hidden" type="hidden" name="cupp_upload_edit_meta" id="cupp_upload_edit_meta"
|
||
|
value="<?php echo esc_url_raw( $upload_edit_url ); ?>"/>
|
||
|
<input id="uploadimage" type='button' class="cupp_wpmu_button button-primary"
|
||
|
value="<?php _e( esc_attr( $button_text ), 'custom-user-profile-photo' ); ?>"/>
|
||
|
<br/>
|
||
|
</div>
|
||
|
|
||
|
<!-- Outputs the text field and displays the URL of the image retrieved by the media uploader -->
|
||
|
<div id="cupp_external">
|
||
|
<input class="regular-text" type="text" name="cupp_meta" id="cupp_meta"
|
||
|
value="<?php echo esc_url_raw( $url ); ?>"/>
|
||
|
</div>
|
||
|
|
||
|
<!-- Outputs the save button -->
|
||
|
<span class="description">
|
||
|
<?php
|
||
|
_e(
|
||
|
'Upload a custom photo for your user profile or use a URL to a pre-existing photo.',
|
||
|
'custom-user-profile-photo'
|
||
|
);
|
||
|
?>
|
||
|
</span>
|
||
|
<p class="description">
|
||
|
<?php _e( 'Update Profile to save your changes.', 'custom-user-profile-photo' ); ?>
|
||
|
</p>
|
||
|
</td>
|
||
|
</tr>
|
||
|
</table><!-- end form-table -->
|
||
|
</div> <!-- end #cupp_container -->
|
||
|
|
||
|
<?php
|
||
|
// Enqueue the WordPress Media Uploader.
|
||
|
wp_enqueue_media();
|
||
|
}
|
||
|
|
||
|
add_action( 'show_user_profile', 'cupp_profile_img_fields' );
|
||
|
add_action( 'edit_user_profile', 'cupp_profile_img_fields' );
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Save the new user CUPP url.
|
||
|
*
|
||
|
* @param int $user_id ID of the user's profile being saved.
|
||
|
*/
|
||
|
function cupp_save_img_meta( $user_id ) {
|
||
|
if ( ! current_user_can( 'upload_files', $user_id ) ) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
$values = array(
|
||
|
// String value. Empty in this case.
|
||
|
'cupp_meta' => filter_input( INPUT_POST, 'cupp_meta', FILTER_SANITIZE_STRING ),
|
||
|
|
||
|
// File path, e.g., http://3five.dev/wp-content/plugins/custom-user-profile-photo/img/placeholder.gif.
|
||
|
'cupp_upload_meta' => filter_input( INPUT_POST, 'cupp_upload_meta', FILTER_SANITIZE_URL ),
|
||
|
|
||
|
// Edit path, e.g., /wp-admin/post.php?post=32&action=edit&image-editor.
|
||
|
'cupp_upload_edit_meta' => filter_input( INPUT_POST, 'cupp_upload_edit_meta', FILTER_SANITIZE_URL ),
|
||
|
);
|
||
|
|
||
|
foreach ( $values as $key => $value ) {
|
||
|
update_user_meta( $user_id, $key, $value );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
add_action( 'personal_options_update', 'cupp_save_img_meta' );
|
||
|
add_action( 'edit_user_profile_update', 'cupp_save_img_meta' );
|
||
|
|
||
|
/**
|
||
|
* Retrieve the appropriate image size
|
||
|
*
|
||
|
* @param int $user_id Default: $post->post_author. Will accept any valid user ID passed into this parameter.
|
||
|
* @param string $size Default: 'thumbnail'. Accepts all default WordPress sizes and any custom sizes made by
|
||
|
* the add_image_size() function.
|
||
|
*
|
||
|
* @return string (Url) Use this inside the src attribute of an image tag or where you need to call the image url.
|
||
|
*/
|
||
|
function get_cupp_meta( $user_id, $size = 'thumbnail' ) {
|
||
|
global $post;
|
||
|
|
||
|
if ( ! $user_id || ! is_numeric( $user_id ) ) {
|
||
|
/*
|
||
|
* Here we're assuming that the avatar being called is the author of the post.
|
||
|
* The theory is that when a number is not supplied, this function is being used to
|
||
|
* get the avatar of a post author using get_avatar() and an email address is supplied
|
||
|
* for the $id_or_email parameter. We need an integer to get the custom image so we force that here.
|
||
|
* Also, many themes use get_avatar on the single post pages and pass it the author email address so this
|
||
|
* acts as a fall back.
|
||
|
*/
|
||
|
$user_id = $post->post_author;
|
||
|
}
|
||
|
|
||
|
// Check first for a custom uploaded image.
|
||
|
$attachment_upload_url = esc_url( get_the_author_meta( 'cupp_upload_meta', $user_id ) );
|
||
|
|
||
|
if ( $attachment_upload_url ) {
|
||
|
// Grabs the id from the URL using the WordPress function attachment_url_to_postid @since 4.0.0.
|
||
|
$attachment_id = attachment_url_to_postid( $attachment_upload_url );
|
||
|
|
||
|
// Retrieve the thumbnail size of our image. Should return an array with first index value containing the URL.
|
||
|
$image_thumb = wp_get_attachment_image_src( $attachment_id, $size );
|
||
|
|
||
|
return isset( $image_thumb[0] ) ? $image_thumb[0] : '';
|
||
|
}
|
||
|
|
||
|
// Finally, check for image from an external URL. If none exists, return an empty string.
|
||
|
$attachment_ext_url = esc_url( get_the_author_meta( 'cupp_meta', $user_id ) );
|
||
|
|
||
|
return $attachment_ext_url ? $attachment_ext_url : '';
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* WordPress Avatar Filter
|
||
|
*
|
||
|
* Replaces the WordPress avatar with your custom photo using the get_avatar hook.
|
||
|
*
|
||
|
* @param string $avatar Image tag for the user's avatar.
|
||
|
* @param int|object|string $identifier User object, UD or email address.
|
||
|
* @param string $size Image size.
|
||
|
* @param string $alt Alt text for the image tag.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
function cupp_avatar( $avatar, $identifier, $size, $alt ) {
|
||
|
if ( $user = cupp_get_user_by_id_or_email( $identifier ) ) {
|
||
|
if ( $custom_avatar = get_cupp_meta( $user->ID, 'thumbnail' ) ) {
|
||
|
return "<img alt='{$alt}' src='{$custom_avatar}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $avatar;
|
||
|
}
|
||
|
|
||
|
add_filter( 'get_avatar', 'cupp_avatar', 1, 5 );
|
||
|
|
||
|
/**
|
||
|
* Get a WordPress User by ID or email
|
||
|
*
|
||
|
* @param int|object|string $identifier User object, ID or email address.
|
||
|
*
|
||
|
* @return WP_User
|
||
|
*/
|
||
|
function cupp_get_user_by_id_or_email( $identifier ) {
|
||
|
// If an integer is passed.
|
||
|
if ( is_numeric( $identifier ) ) {
|
||
|
return get_user_by( 'id', (int) $identifier );
|
||
|
}
|
||
|
|
||
|
// If the WP_User object is passed.
|
||
|
if ( is_object( $identifier ) && property_exists( $identifier, 'ID' ) ) {
|
||
|
return get_user_by( 'id', (int) $identifier->ID );
|
||
|
}
|
||
|
|
||
|
// If the WP_Comment object is passed.
|
||
|
if ( is_object( $identifier ) && property_exists( $identifier, 'user_id' ) ) {
|
||
|
return get_user_by( 'id', (int) $identifier->user_id );
|
||
|
}
|
||
|
|
||
|
return get_user_by( 'email', $identifier );
|
||
|
}
|