{"id":335966,"date":"2026-07-23T19:35:48","date_gmt":"2026-07-23T19:35:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/custom-user-avatars\/"},"modified":"2026-09-02T14:15:31","modified_gmt":"2026-09-02T14:15:31","slug":"avatarly","status":"publish","type":"plugin","link":"https:\/\/emoji.wordpress.org\/plugins\/avatarly\/","author":13995663,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.8","stable_tag":"1.0.8","tested":"7.1","requires":"6.3","requires_php":"7.4","requires_plugins":null,"header_name":"Avatarly \u2013 Custom User Avatars & Local Profile Pictures","header_author":"Saumya Sharma","header_description":"Let users upload and manage local custom avatars from the profile screen, a shortcode, a widget, or a Gutenberg block \u2014 with full styling controls and no reliance on Gravatar.","assets_banners_color":"4d7890","last_updated":"2026-09-02 14:15:31","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/avatarly\/","header_author_uri":"https:\/\/iamsaumya.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":328,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"saumya010","date":"2026-07-23 21:25:02","revision":3620519},"1.0.2":{"tag":"1.0.2","author":"saumya010","date":"2026-07-25 16:48:02","revision":3622638},"1.0.3":{"tag":"1.0.3","author":"saumya010","date":"2026-08-03 15:26:50","revision":3633143},"1.0.4":{"tag":"1.0.4","author":"saumya010","date":"2026-08-26 13:11:28","revision":3667069},"1.0.5":{"tag":"1.0.5","author":"saumya010","date":"2026-08-31 13:36:20","revision":3674345},"1.0.6":{"tag":"1.0.6","author":"saumya010","date":"2026-09-02 13:15:17","revision":3678060},"1.0.7":{"tag":"1.0.7","author":"saumya010","date":"2026-09-02 14:07:36","revision":3678136},"1.0.8":{"tag":"1.0.8","author":"saumya010","date":"2026-09-02 14:15:31","revision":3678148}},"upgrade_notice":{"1.0.6":"<p>Fixes the Square shape option ignoring the Corner Radius setting, plus Settings screen alignment cleanup. Update recommended.<\/p>","1.0.5":"<p>Fixes avatar size and shape settings not applying correctly (blurry avatars at larger sizes, square shape ignoring corner radius). Update recommended.<\/p>","1.0.3":"<p>Fixes avatar uploads not saving when an administrator edits another user&#039;s profile. Update recommended if you manage avatars for other users from wp-admin.<\/p>","1.0.2":"<p>Security hardening for the avatar uploads folder and REST endpoints. Update recommended.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3620463,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3620463,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3620463,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3620463,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3620463,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"avatarly\/avatar-upload":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"avatarly\/avatar-upload","title":"Avatarly","category":"widgets","icon":"id-alt","description":"Lets the logged-in user upload or remove their local avatar.","keywords":["avatar upload","avatar","profile picture","user photo","gravatar"],"textdomain":"avatarly","attributes":{"size":{"type":"number","default":96},"showDelete":{"type":"boolean","default":true}},"supports":{"html":false,"align":["left","center","right"],"spacing":{"margin":true,"padding":true}},"editorScript":"file:.\/index.js","style":"file:.\/style.css","render":"file:.\/render.php"}},"tagged_versions":["1.0.1","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings screen \u2014 General &amp; Permissions tab.","2":"Settings screen \u2014 Styling tab.","3":"Front-end avatar upload form (shortcode\/widget\/block).","4":"Avatarly block in the editor."}},"plugin_section":[],"plugin_tags":[129,127,7894,259,9246],"plugin_category":[44],"plugin_contributors":[91582],"plugin_business_model":[],"class_list":["post-335966","plugin","type-plugin","status-publish","hentry","plugin_tags-avatar","plugin_tags-gravatar","plugin_tags-profile-picture","plugin_tags-upload","plugin_tags-user-profile","plugin_category-discussion-and-community","plugin_contributors-saumya010","plugin_committers-saumya010"],"banners":{"banner":"https:\/\/ps.w.org\/avatarly\/assets\/banner-772x250.png?rev=3620463","banner_2x":"https:\/\/ps.w.org\/avatarly\/assets\/banner-1544x500.png?rev=3620463","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/avatarly\/assets\/icon.svg?rev=3620463","icon":"https:\/\/ps.w.org\/avatarly\/assets\/icon.svg?rev=3620463","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Avatarly adds a local, self-hosted avatar system to WordPress. Users can upload a profile picture directly on your site instead of relying on Gravatar, and site owners get full control over who's allowed to upload, how avatars look, and where uploads are permitted.<\/p>\n\n<p><strong>Three ways to let users manage their avatar on the front end:<\/strong><\/p>\n\n<ul>\n<li><strong>Shortcode<\/strong> \u2014 <code>[avatarly]<\/code><\/li>\n<li><strong>Widget<\/strong> \u2014 add the \"Avatarly (Legacy)\" widget to any sidebar (classic, non-block themes)<\/li>\n<li><strong>Gutenberg block<\/strong> \u2014 search for \"Avatarly\" in the block inserter<\/li>\n<\/ul>\n\n<p>Avatars can also always be managed from the standard WordPress <strong>Edit Profile<\/strong> screen.<\/p>\n\n<p><strong>Key features<\/strong><\/p>\n\n<ul>\n<li>Local avatar storage \u2014 no data sent to Gravatar unless you choose to keep it as a fallback.<\/li>\n<li>Drag-and-drop \/ AJAX upload on the front end (progressively enhanced; falls back to a normal form for no-JS visitors).<\/li>\n<li>Built-in crop and reposition popup: drag to pan and use the zoom slider to frame the shot before saving, or skip it to use the automatic center crop.<\/li>\n<li>Strict upload validation: real MIME\/extension checks, image verification, and file-size limits \u2014 not just a filename blacklist.<\/li>\n<li>Automatic EXIF\/GPS metadata stripping from uploaded images.<\/li>\n<li>Fine-grained permissions: restrict uploads by capability and\/or by specific roles.<\/li>\n<li>A dedicated <strong>Styling<\/strong> tab: size, shape (circle\/rounded\/square), border, shadow, accent color, and button text.<\/li>\n<li>Optional automatic cleanup of avatar files when a user account is deleted.<\/li>\n<li>Translation ready.<\/li>\n<\/ul>\n\n<h4>Developer hooks<\/h4>\n\n<ul>\n<li><code>avatarly_avatar_size<\/code> (filter) \u2014 change the avatar size used when generating a sized copy.<\/li>\n<li><code>avatarly_avatar_data<\/code> (filter) \u2014 filter the final avatar data array.<\/li>\n<li><code>avatarly_avatar_html<\/code> (filter) \u2014 filter the rendered <code>&lt;img&gt;<\/code> HTML.<\/li>\n<li><code>avatarly_avatar_uploaded<\/code> (action) \u2014 fires after a successful upload.<\/li>\n<li><code>avatarly_avatar_deleted<\/code> (action) \u2014 fires after an avatar is removed.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>avatarly<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install it through the Plugins screen directly.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen in WordPress.<\/li>\n<li>Visit <strong>Settings \u2192 Avatarly<\/strong> to configure permissions and styling.<\/li>\n<li>Add the <code>[avatarly]<\/code> shortcode to a page, add the \"Avatarly (Legacy)\" widget to a sidebar, or insert the \"Avatarly\" block wherever logged-in users need to manage their avatar.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20a%20gravatar%20alternative%2C%20or%20does%20it%20replace%20gravatar%20entirely%3F\"><h3>Is this a Gravatar alternative, or does it replace Gravatar entirely?<\/h3><\/dt>\n<dd><p>It works as a Gravatar alternative, but by default it layers on top rather than replacing it outright: if a user hasn't uploaded a local avatar, WordPress falls back to Gravatar (or your configured default) as usual. You can disable that fallback in Settings \u2192 Avatarly \u2192 General &amp; Permissions if you want local avatars only.<\/p><\/dd>\n<dt id=\"what%20image%20types%20are%20supported%3F\"><h3>What image types are supported?<\/h3><\/dt>\n<dd><p>JPG, PNG, GIF, and WebP.<\/p><\/dd>\n<dt id=\"can%20i%20choose%20which%20part%20of%20my%20photo%20is%20used%3F\"><h3>Can I choose which part of my photo is used?<\/h3><\/dt>\n<dd><p>Yes. When you select or drop an image, a crop popup lets you drag to reposition and zoom before saving. Selecting \"Skip\" uploads the image with an automatic center crop instead.<\/p><\/dd>\n<dt id=\"can%20i%20restrict%20who%20is%20allowed%20to%20upload%20an%20avatar%3F\"><h3>Can I restrict who is allowed to upload an avatar?<\/h3><\/dt>\n<dd><p>Yes. Under Settings \u2192 Avatarly \u2192 General &amp; Permissions you can require the <code>upload_files<\/code> capability and\/or restrict uploads to specific roles.<\/p><\/dd>\n<dt id=\"where%20are%20avatar%20files%20stored%3F\"><h3>Where are avatar files stored?<\/h3><\/dt>\n<dd><p>In <code>wp-content\/uploads\/avatarly\/<\/code>, following WordPress's standard year\/month upload structure.<\/p><\/dd>\n<dt id=\"i%20changed%20a%20styling%20setting%20but%20the%20site%20still%20looks%20the%20same\"><h3>I changed a styling setting but the site still looks the same<\/h3><\/dt>\n<dd><p>Styling settings take effect immediately \u2014 if a page still shows the old look after saving, a caching plugin (or your host) is likely serving a cached copy of that page from before the change. Clear that cache (or wait for it to expire) rather than re-saving the setting.<\/p><\/dd>\n<dt id=\"what%20happens%20to%20avatar%20files%20if%20i%20delete%20a%20user%3F\"><h3>What happens to avatar files if I delete a user?<\/h3><\/dt>\n<dd><p>By default nothing is deleted automatically. You can enable automatic cleanup on user deletion in the General &amp; Permissions tab.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Shortened the readme's short description \u2014 the previous one exceeded WordPress.org's 150-character limit and was being truncated on import.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>Updated the plugin title and descriptions for clarity \u2014 no functional changes.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>Fixed the \"Square\" shape option silently ignoring the Corner Radius slider, so a square avatar could never actually show rounded corners. Removed the separate Shape setting \u2014 Corner Radius (0% = sharp square, 50% = full circle) now controls the shape on its own.<\/li>\n<li>Added a note that styling changes take effect immediately, but a caching plugin or host-level page cache may still show an older cached version of a page until that cache is cleared.<\/li>\n<li>Cleaned up alignment and spacing on the Settings screen so fields with multiple controls (e.g. Border width\/style\/color) line up consistently.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed the Settings \u2192 Avatarly \"Avatar size\" option only resizing the avatar visually via CSS, without changing the actual image file served or its width\/height attributes. This could make avatars look blurry or stretched at a larger size, since the smaller original file was being scaled up by the browser. Avatars now correctly generate and serve a real image file matching the configured size, everywhere they're displayed.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Confirmed compatible with WordPress 7.1.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fixed the admin \"Edit User\" profile screen (e.g. an administrator uploading an avatar for another user) not saving a newly-selected avatar at all: the selected filename showed correctly in the field, but the page reloaded with no changes and no error. WordPress core's own user-profile form doesn't set <code>enctype=\"multipart\/form-data\"<\/code>, since core itself has no file upload there \u2014 without it, the browser can't actually send file data on submit. The form now correctly includes this attribute so avatar uploads on that screen work as expected.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Security hardening: the avatar uploads subfolder now writes its own .htaccess\/index.php to deny script execution as a defense-in-depth measure, and the upload\/delete REST endpoints are now rate-limited per user.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Removed the Custom CSS settings field. Per WordPress.org plugin guidelines, plugins may not let users save arbitrary custom CSS\/JS\/PHP; all supported styling (size, shape, border, shadow, accent color) is already exposed as dedicated controls in Settings \u2192 Avatarly \u2192 Styling.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release, including a crop\/reposition popup (drag to pan, zoom slider, skippable) for the front-end upload flow.<\/li>\n<\/ul>","raw_excerpt":"Custom user avatars with no Gravatar account required: upload and manage a local profile picture from any WordPress profile.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/335966","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=335966"}],"author":[{"embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/saumya010"}],"wp:attachment":[{"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=335966"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=335966"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=335966"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=335966"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=335966"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/emoji.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=335966"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}