{"id":8757,"date":"2010-04-20T19:50:18","date_gmt":"2010-04-20T19:50:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/webfinger\/"},"modified":"2025-12-16T11:02:43","modified_gmt":"2025-12-16T11:02:43","slug":"webfinger","status":"publish","type":"plugin","link":"https:\/\/azb.wordpress.org\/plugins\/webfinger\/","author":130940,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"4.0.1","stable_tag":"4.0.1","tested":"6.9.4","requires":"4.2","requires_php":"","requires_plugins":null,"header_name":"WebFinger","header_author":"Matthias Pfefferle","header_description":"","assets_banners_color":"ddb603","last_updated":"2025-12-16 11:02:43","external_support_url":"","external_repository_url":"https:\/\/github.com\/pfefferle\/wordpress-webfinger","donate_link":"https:\/\/notiz.blog\/donate\/","header_plugin_uri":"https:\/\/github.com\/pfefferle\/wordpress-webfinger","header_author_uri":"https:\/\/notiz.blog\/","rating":3.7,"author_block_rating":0,"active_installs":1000,"downloads":21633,"num_ratings":3,"support_threads":1,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.5":{"tag":"0.5","author":"pfefferle","date":"2010-04-20 20:16:46"},"0.7":{"tag":"0.7","author":"pfefferle","date":"2010-11-13 21:09:45"},"0.9":{"tag":"0.9","author":"pfefferle","date":"2011-01-06 22:34:51"},"0.9.1":{"tag":"0.9.1","author":"pfefferle","date":"2011-06-28 17:17:28"},"1.0":{"tag":"1.0","author":"pfefferle","date":"2011-06-29 21:56:17"},"1.0.1":{"tag":"1.0.1","author":"pfefferle","date":"2011-11-18 16:11:02"},"1.1":{"tag":"1.1","author":"pfefferle","date":"2011-12-13 15:41:05"},"1.2":{"tag":"1.2","author":"pfefferle","date":"2012-01-24 10:46:46"},"1.3":{"tag":"1.3","author":"pfefferle","date":"2012-04-06 11:23:08"},"1.3.1":{"tag":"1.3.1","author":"pfefferle","date":"2012-07-31 12:44:10"},"2.0.0":{"tag":"2.0.0","author":"pfefferle","date":"2013-06-14 12:34:04"},"2.0.1":{"tag":"2.0.1","author":"pfefferle","date":"2013-06-14 12:39:33"},"3.0.0":{"tag":"3.0.0","author":"pfefferle","date":"2014-02-11 10:00:35"},"3.0.1":{"tag":"3.0.1","author":"pfefferle","date":"2015-07-17 22:12:34"},"3.0.2":{"tag":"3.0.2","author":"pfefferle","date":"2016-11-20 23:10:19"},"3.0.3":{"tag":"3.0.3","author":"pfefferle","date":"2017-01-26 22:09:14"},"3.0.4":{"tag":"3.0.4","author":"pfefferle","date":"2017-05-06 21:37:06"},"3.1.0":{"tag":"3.1.0","author":"pfefferle","date":"2017-07-16 14:42:52"},"3.1.1":{"tag":"3.1.1","author":"pfefferle","date":"2017-07-16 18:51:08"},"3.1.2":{"tag":"3.1.2","author":"pfefferle","date":"2017-07-16 19:09:35"},"3.1.3":{"tag":"3.1.3","author":"pfefferle","date":"2017-07-16 19:45:25"},"3.1.4":{"tag":"3.1.4","author":"pfefferle","date":"2018-01-28 19:19:11"},"3.1.5":{"tag":"3.1.5","author":"pfefferle","date":"2018-01-30 20:16:01"},"3.1.6":{"tag":"3.1.6","author":"pfefferle","date":"2018-09-07 07:30:34"},"3.2.0":{"tag":"3.2.0","author":"pfefferle","date":"2018-10-09 20:20:40"},"3.2.1":{"tag":"3.2.1","author":"pfefferle","date":"2018-10-09 20:34:15"},"3.2.2":{"tag":"3.2.2","author":"pfefferle","date":"2018-11-03 17:20:09"},"3.2.3":{"tag":"3.2.3","author":"pfefferle","date":"2018-11-03 17:31:08"},"3.2.4":{"tag":"3.2.4","author":"pfefferle","date":"2020-03-30 21:29:10"},"3.2.5":{"tag":"3.2.5","author":"pfefferle","date":"2022-11-09 12:44:44"},"3.2.6":{"tag":"3.2.6","author":"pfefferle","date":"2023-10-23 09:59:06"},"3.2.7":{"tag":"3.2.7","author":"pfefferle","date":"2025-12-07 22:18:11"},"4.0.0":{"tag":"4.0.0","author":"pfefferle","date":"2025-12-11 10:40:15"},"4.0.1":{"tag":"4.0.1","author":"pfefferle","date":"2025-12-16 11:02:43"}},"upgrade_notice":{"4.0.0":"<p>This is a major update with new features (Site Health checks, user profile settings) and requires PHP 7.2 or higher. After updating, visit <strong>Tools \u2192 Site Health<\/strong> to verify your WebFinger setup is working correctly.<\/p>","3.0.0":"<p>This version drops classic WebFinger (XRD) support to keep the plugin lightweight. If you need legacy XRD format support, install the <a href=\"https:\/\/github.com\/pfefferle\/wordpress-webfinger-legacy\">WebFinger Legacy<\/a> plugin.<\/p>"},"ratings":{"1":1,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":2815154,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":2815154,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":2815154,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.5","0.7","0.9","0.9.1","1.0","1.0.1","1.1","1.2","1.3","1.3.1","2.0.0","2.0.1","3.0.0","3.0.1","3.0.2","3.0.3","3.0.4","3.1.0","3.1.1","3.1.2","3.1.3","3.1.4","3.1.5","3.1.6","3.2.0","3.2.1","3.2.2","3.2.3","3.2.4","3.2.5","3.2.6","3.2.7","4.0.0","4.0.1"],"block_files":[],"assets_screenshots":[],"screenshots":[],"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[162216,6645,35031,47559,54763],"plugin_category":[],"plugin_contributors":[77968,80579],"plugin_business_model":[216239],"class_list":["post-8757","plugin","type-plugin","status-publish","hentry","plugin_tags-activitypub","plugin_tags-discovery","plugin_tags-jrd","plugin_tags-ostatus","plugin_tags-webfinger","plugin_contributors-pfefferle","plugin_contributors-willnorris","plugin_business_model-community","plugin_committers-pfefferle"],"banners":{"banner":"https:\/\/ps.w.org\/webfinger\/assets\/banner-772x250.jpg?rev=2815154","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/webfinger\/assets\/icon-128x128.png?rev=2815154","icon_2x":"https:\/\/ps.w.org\/webfinger\/assets\/icon-256x256.png?rev=2815154","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>WebFinger allows you to be discovered on the web using an identifier like <code>you@yourdomain.com<\/code> \u2014 similar to how email works, but for your online identity.<\/p>\n\n<p><strong>Why is this useful?<\/strong><\/p>\n\n<ul>\n<li><strong>Fediverse &amp; Mastodon:<\/strong> WebFinger is essential for federation. It allows Mastodon and other ActivityPub-powered platforms to find and follow your WordPress site.<\/li>\n<li><strong>Decentralized Identity:<\/strong> People can look you up using your WordPress domain, making your site the canonical source for your online identity.<\/li>\n<li><strong>Works with other plugins:<\/strong> This plugin provides the foundation that other plugins (like the ActivityPub plugin) build upon.<\/li>\n<\/ul>\n\n<p><strong>How it works:<\/strong><\/p>\n\n<p>When someone searches for <code>@you@yourdomain.com<\/code> on Mastodon or another federated service, their server asks your WordPress site: \"Who is this person?\" WebFinger answers that question by providing information about you and links to your profiles.<\/p>\n\n<p><strong>Technical details:<\/strong><\/p>\n\n<p>WebFinger is an open standard (<a href=\"http:\/\/tools.ietf.org\/html\/rfc7033\">RFC 7033<\/a>) that enables discovery of information about people and resources on the internet. It works by responding to requests at <code>\/.well-known\/webfinger<\/code> on your domain.<\/p>\n\n<!--section=installation-->\n<h3>From WordPress.org (recommended)<\/h3>\n\n<ol>\n<li>Go to <strong>Plugins \u2192 Add New<\/strong> in your WordPress admin<\/li>\n<li>Search for \"webfinger\"<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong><\/li>\n<li>Make sure pretty permalinks are enabled (<strong>Settings \u2192 Permalinks<\/strong> \u2014 select any option except \"Plain\")<\/li>\n<li>Visit <strong>Tools \u2192 Site Health<\/strong> to verify everything is working<\/li>\n<\/ol>\n\n<h3>Manual Installation<\/h3>\n\n<ol>\n<li>Download the plugin from <a href=\"https:\/\/wordpress.org\/plugins\/webfinger\/\">WordPress.org<\/a> or <a href=\"https:\/\/github.com\/pfefferle\/wordpress-webfinger\/releases\">GitHub<\/a><\/li>\n<li>Upload the <code>webfinger<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin in <strong>Plugins \u2192 Installed Plugins<\/strong><\/li>\n<li>Enable pretty permalinks if not already active<\/li>\n<li>Check <strong>Tools \u2192 Site Health<\/strong> to confirm the setup<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id='how%20do%20i%20customize%20my%20webfinger%20identifier%3F'><h3>How do I customize my WebFinger identifier?<\/h3><\/dt>\n<dd><p>Go to <strong>Users \u2192 Profile<\/strong> in your WordPress admin and scroll down to the \"WebFinger\" section. There you can set a custom identifier (the part before the @) and see all your WebFinger aliases.<\/p><\/dd>\n<dt id='how%20do%20i%20check%20if%20webfinger%20is%20working%3F'><h3>How do I check if WebFinger is working?<\/h3><\/dt>\n<dd><p>Visit <strong>Tools \u2192 Site Health<\/strong> in your WordPress admin. The plugin adds checks that verify your WebFinger endpoint is accessible and properly configured. If there are any issues, you'll see guidance on how to fix them.<\/p><\/dd>\n<dt id='does%20this%20work%20with%20mastodon%3F'><h3>Does this work with Mastodon?<\/h3><\/dt>\n<dd><p>Yes! WebFinger is the standard that Mastodon and other Fediverse platforms use to discover users. When someone searches for <code>@you@yourdomain.com<\/code>, WebFinger tells them where to find your profile.<\/p><\/dd>\n<dt id='do%20i%20need%20pretty%20permalinks%3F'><h3>Do I need pretty permalinks?<\/h3><\/dt>\n<dd><p>Yes. WebFinger requires pretty permalinks to be enabled. Go to <strong>Settings \u2192 Permalinks<\/strong> and select any option other than \"Plain\".<\/p><\/dd>\n<dt id='for%20developers%3A%20how%20do%20i%20add%20custom%20data%20to%20the%20webfinger%20response%3F'><h3>For developers: How do I add custom data to the WebFinger response?<\/h3><\/dt>\n<dd><p>Use the <code>webfinger_data<\/code> filter to add your own links or properties:<\/p>\n\n<pre><code>add_filter( 'webfinger_data', function( $data ) {\n  $data['links'][] = array(\n    'rel'  =&gt; 'http:\/\/example.com\/rel\/profile',\n    'href' =&gt; 'http:\/\/example.com\/profile',\n    'type' =&gt; 'text\/html',\n  );\n  return $data;\n} );\n<\/code><\/pre><\/dd>\n<dt id='for%20developers%3A%20how%20do%20i%20add%20alternate%20output%20formats%3F'><h3>For developers: How do I add alternate output formats?<\/h3><\/dt>\n<dd><p>Use the <code>webfinger_render<\/code> action to output custom formats (like XRD):<\/p>\n\n<pre><code>add_action( 'webfinger_render', function( $webfinger ) {\n  \/\/ Set custom headers and output your format\n  \/\/ ...\n  exit;\n}, 5 );\n<\/code><\/pre>\n\n<p>See <a href=\"https:\/\/github.com\/pfefferle\/wordpress-webfinger-legacy\">https:\/\/github.com\/pfefferle\/wordpress-webfinger-legacy<\/a> for a complete example.<\/p><\/dd>\n<dt id='where%20can%20i%20learn%20more%20about%20webfinger%3F'><h3>Where can I learn more about WebFinger?<\/h3><\/dt>\n<dd><ul>\n<li>WebFinger specification: <a href=\"http:\/\/tools.ietf.org\/html\/rfc7033\">RFC 7033<\/a><\/li>\n<li>Community resources: <a href=\"http:\/\/webfinger.net\">http:\/\/webfinger.net<\/a><\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<p>Project maintained on github at <a href=\"https:\/\/github.com\/pfefferle\/wordpress-webfinger\">pfefferle\/wordpress-webfinger<\/a>.<\/p>\n\n<h3>4.0.1<\/h3>\n\n<ul>\n<li>Fixed: Handle WP_Error objects in <code>filter_by_rel<\/code> to prevent errors when WebFinger lookup fails<\/li>\n<\/ul>\n\n<h3>4.0.0<\/h3>\n\n<ul>\n<li>Added: Site Health integration to check your WebFinger setup status directly in WordPress<\/li>\n<li>Added: User profile settings to customize your WebFinger identifier<\/li>\n<li>Added: Verification links to easily test your WebFinger aliases<\/li>\n<li>Improved: Security hardening for URI parsing and input validation<\/li>\n<li>Improved: Modernized codebase for PHP 7.2+ with namespace support<\/li>\n<li>Improved: Better organized code structure with separate classes<\/li>\n<li>Updated: Development infrastructure with GitHub Actions for automated testing<\/li>\n<\/ul>\n\n<h3>3.2.7<\/h3>\n\n<ul>\n<li>Added: better output escaping<\/li>\n<li>Fixed: stricter queries<\/li>\n<\/ul>\n\n<h3>3.2.6<\/h3>\n\n<ul>\n<li>remove E-Mail address<\/li>\n<\/ul>\n\n<h3>3.2.5<\/h3>\n\n<ul>\n<li>fix typo<\/li>\n<\/ul>\n\n<h3>3.2.4<\/h3>\n\n<ul>\n<li>update requirements<\/li>\n<\/ul>\n\n<h3>3.2.3<\/h3>\n\n<ul>\n<li>fixed <code>acct<\/code> scheme for discovery<\/li>\n<\/ul>\n\n<h3>3.2.2<\/h3>\n\n<ul>\n<li>fixed typo (thanks @ivucica)<\/li>\n<li>use <code>acct<\/code> as default scheme<\/li>\n<\/ul>\n\n<h3>3.2.1<\/h3>\n\n<ul>\n<li>make <code>acct<\/code> protocol optional<\/li>\n<\/ul>\n\n<h3>3.2.0<\/h3>\n\n<ul>\n<li>global refactoring<\/li>\n<\/ul>\n\n<h3>3.1.6<\/h3>\n\n<ul>\n<li>added <code>user_nicename<\/code> as resource<\/li>\n<li>fixed WordPress coding standard issues<\/li>\n<\/ul>\n\n<h3>3.1.5<\/h3>\n\n<ul>\n<li>fixed PHP warning<\/li>\n<\/ul>\n\n<h3>3.1.4<\/h3>\n\n<ul>\n<li>updated requirements<\/li>\n<\/ul>\n\n<h3>3.1.3<\/h3>\n\n<ul>\n<li>add support for the 'aim', 'ymsgr' and 'acct' protocol<\/li>\n<\/ul>\n\n<h3>3.1.2<\/h3>\n\n<ul>\n<li>fixed the legacy code<\/li>\n<li>added feeds<\/li>\n<\/ul>\n\n<h3>3.1.1<\/h3>\n\n<ul>\n<li>fixed 'get_user_by_various' function<\/li>\n<\/ul>\n\n<h3>3.1.0<\/h3>\n\n<ul>\n<li>Added WebFinger legacy plugin, because the legacy version is still very popular and used by for example OStatus (Mastodon, Status.NET and GNU Social)<\/li>\n<li>Added Webfinger for posts support<\/li>\n<\/ul>\n\n<h3>3.0.3<\/h3>\n\n<ul>\n<li>composer support<\/li>\n<li>compatibility updates<\/li>\n<\/ul>\n\n<h3>3.0.2<\/h3>\n\n<ul>\n<li><code>get_avatar_url<\/code> instead of custom code<\/li>\n<li>some small code improvements<\/li>\n<li>nicer PHP-docs<\/li>\n<\/ul>\n\n<h3>3.0.1<\/h3>\n\n<ul>\n<li>updated version informations<\/li>\n<li>support the WordPress Coding Standard<\/li>\n<\/ul>\n\n<h3>3.0.0<\/h3>\n\n<ul>\n<li>added correct error-responses<\/li>\n<li>remove legacy support for XRD and host-meta (props to Will Norris)<\/li>\n<\/ul>\n\n<h3>2.0.1<\/h3>\n\n<ul>\n<li>small bugfix<\/li>\n<\/ul>\n\n<h3>2.0.0<\/h3>\n\n<ul>\n<li>complete refactoring<\/li>\n<li>removed simple-web-discovery<\/li>\n<li>more filters and actions<\/li>\n<li>works without \/.well-known\/ plugin<\/li>\n<\/ul>\n\n<h3>1.4.0<\/h3>\n\n<ul>\n<li>small fixes<\/li>\n<li>added \"webfinger\" as well-known uri<\/li>\n<\/ul>\n\n<h3>1.3.1<\/h3>\n\n<ul>\n<li>added \"rel\"-filter (work in progress)<\/li>\n<li>added more aliases<\/li>\n<\/ul>\n\n<h3>1.3<\/h3>\n\n<ul>\n<li>added host-meta resource feature (see latest spec)<\/li>\n<\/ul>\n\n<h3>1.2<\/h3>\n\n<ul>\n<li>added 404 http error if user doesn't exist<\/li>\n<li>added jrd discovery for host-meta<\/li>\n<\/ul>\n\n<h3>1.1<\/h3>\n\n<ul>\n<li>fixed an odd problem with lower WordPress versions<\/li>\n<li>added support for the http:\/\/wordpress.org\/extend\/plugins\/extended-profile\/ (thanks to Singpolyma)<\/li>\n<\/ul>\n\n<h3>1.0.1<\/h3>\n\n<ul>\n<li>api improvements<\/li>\n<\/ul>\n\n<h3>1.0<\/h3>\n\n<ul>\n<li>basic simple-seb-discovery<\/li>\n<li>json support<\/li>\n<li>some small improvements<\/li>\n<\/ul>\n\n<h3>0.9.1<\/h3>\n\n<ul>\n<li>some changes to support http:\/\/unhosted.org<\/li>\n<\/ul>\n\n<h3>0.9<\/h3>\n\n<ul>\n<li>OStatus improvements<\/li>\n<li>Better uri handling<\/li>\n<li>Identifier overview (more to come)<\/li>\n<li>Added filters<\/li>\n<li>Added functions to get a users webfingers<\/li>\n<\/ul>\n\n<h3>0.7<\/h3>\n\n<ul>\n<li>Added do_action param (for future OStatus plugin)<\/li>\n<li>Author-Url as Webfinger-Identifier<\/li>\n<\/ul>\n\n<h3>0.5<\/h3>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"WebFinger for WordPress","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/8757","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=8757"}],"author":[{"embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/pfefferle"}],"wp:attachment":[{"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=8757"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=8757"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=8757"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=8757"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=8757"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/azb.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=8757"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}