900+
October 21, 2026
January 10, 2014
Bring conversations from across the web to your WordPress site. Webmention lets you notify another website when you link to it and receive notifications when other websites link to yours.
A Webmention is a notification that one URL links to another. For example, someone can publish a response on their own blog, link to your post, and send a Webmention so that their response appears in your comments after moderation.
Responses can also be likes, reposts, bookmarks, RSVPs, and other interactions. The plugin recognizes these response types and can display reactions as facepiles: groups of avatars beneath your post.
Follow the normal instructions for installing WordPress plugins.
To add a WordPress Plugin using the built-in plugin installer:
webmention” into the Search Plugins box.There are a few cases when manually installing a WordPress Plugin is appropriate.
Installation of a WordPress Plugin manually requires FTP familiarity and the awareness that you may put your site at risk if you install a WordPress Plugin incompatible with the current version or from an unreliable source.
Backup your site completely before proceeding.
To install a WordPress Plugin manually:
wp-content/plugins folder in your WordPress directory online.On block themes with WordPress 6.4 or newer, the Webmention Form block is automatically placed after the Comments block when Block Hooks are available. You can move or remove it in the Site Editor, or insert it manually in the block editor. Classic themes use the form setting instead.
Webmention is a way to notify a website when you link to it on your site. The receiving website can then display your post as a reply or reaction.
Webmention is an update/replacement for Pingback or Trackback. Unlike the older protocols, the specification is recommended by the W3C as well as an active community of individuals using it on their sites.
Open Settings Webmention, or IndieWeb Webmention if the IndieWeb plugin is active:
You can also insert the Webmention Form block manually in the block editor. It displays a form when Webmentions are open for the post and avoids duplicate forms for the same post. The help text can be customized in Webmention settings.
You can use the send_webmention($source, $target) function and pass a source and a target or you can fire an action like do_action('send_webmention', $source, $target).
When declaring your custom post type, add post type support for Webmentions by either including it in your register_post_type entry. This can also be added in the Webmention settings.
You can enable receiving Webmentions for attachments in Webmention settings. You can enable sending Webmentions for media links in the settings. Please note that most receivers of Webmentions do not support receiving them to image, audio, and video files. In order to support receiving them on WordPress, Webmention endpoint headers would have to be added at the webserver level.
WordPress stores comments against individual posts, pages, or other post types. To collect mentions of your homepage, choose a page in Webmention settings.
For archive pages and other URLs, use the webmention_post_id filter to assign incoming mentions to a post or page.
In the below example, if there is no page returned it will send mentions to a catch-all post. You can also have unique posts per URL.
function handle_other_webmentions($id, $target) {
// do nothing if id is set
if ($id) {
return $id;
}
// return "default" id if plugin can't find a post/page
return 9247;
}
add_filter("webmention_post_id", "handle_other_webmentions", 10, 2);
The URL for the Webmention endpoint, which you can view in the source of your pages, should be excluded from any server or plugin caching.
As Webmention uses the REST API endpoint system, most up to date caching plugins should exclude it by default.
Webmentions have the ability to act as rich comments. This includes showing avatars. If there is an avatar discovered, the URL for it will be stored. This can either be reflect something from the media library or a URL of a file. If the file is broken, it will store a local
copy of the default gravatar image.
Webmention headers are only shown if Webmentions are available for that particular URL. If you want to show it regardless, you can add below to your wp-config.php file.
define( 'WEBMENTION_ALWAYS_SHOW_HEADERS', 1 );
This plugin includes several enhancements to the built-in WordPress commenting system to allow for enhancement, while allowing existing methods to offer customization. It customizes the classic defaults for WordPress to account for webmentions by using a custom comment walker that minimally changes to defaults.
By default, many themes provide a custom callback to the wp_list_comments function. This plugin adds several enhancements to that. For one, the custom callbacks argument is usually a string with the function name. We enhance it to behave as normal in that case, but if an array is passed, to allow specific callbacks per the key of the array, or the ‘all’ key as a default. This means each comment type, which would be each webmention type or otherwise, can have its own custom callback.
It introduces a new version of the default function for html5 comments, adding correct microformats2 markup, and for webmentions, a proper site citation, e.g. Bob @ Example.Com as well as a hook, webmention_comment_metadata which offers a comment object as the sole argument, to add arbitrary metadata. This would be overridden by any custom comment rendering done by themes.
There is an option within the plugin to show webmentions not determined to be replies or comments inline, or to display them separately as avatar only lists. The wp_list_comments function is overridden to allow for the avatar_only option, which will render this, with a second option of overlay to overlay an icon reflecting the reaction type. Reactions are webmention types such as like, which there is no textual component to it. If you opt to display them as comments, the text will read that the author likes this post.
While not all display options can be settings, we are looking to provide some simple options which could be customized in a theme if needed.
Project and support maintained on github at pfefferle/wordpress-webmention.
local/, with WP_DEBUG on they turned off reject_unsafe_urls for every outbound request on the site and let MF2::is_url() accept every well-formed URL@wordpress/icons instead of emojis for the comment typeswp_no_robots() with the wp_robots filterog:title) was stored in the comment without sanitizing, unlike content and summaryhref without esc_url()webmention_form_text filterwebmention_http_error_codes filter to customize which HTTP status codes count as a deleted sourcescandir warnings from filling the logs, props @edentregister_meta sanitize callbacks (esc_url_raw for URL meta, sanitize_key/sanitize_text_field for the rest) to keep the database cleanwebmention_update_messageValueError in DOMDocument::loadHTML() when the post content is empty on PHP 8.1+wp_safe_remote_get for author page and tools requeststype parameterrequire_once for Handler classes, rely on autoloader insteadItem::__call magic method when accessing non-existent properties like category.custom-fields support.array_merge() error when _embedded key is missing in WordPress API response.comment_content when webmention has no content.webmention_form_submit_text filter to customize the “Ping me!” button text.parse_post_json when JSON is invalid.webmentions_disabled meta value not being deleted.webmention_show_facepile setting.version() methodcomment_link only for Webmentions and only in the frontendcomment_link only for Webmentions that have a sourcecomments.phponerror handling also for srcset ( props @florianbrinkmann for testing )onerror handling for broken images ( props @snarfed )Webmention_Notification class until proper tested/usedwp_allow_comment function called by the wp_new_comment function.pings_openis_avatar_comment_type (introduced 5.1) and get_self_link (introduced 5.3) for use in this pluginwebmention_avatars on the settings pagewebmention_avatarswp_add_privacy_policy_content callThanks Sebastian Greger
Thanks Sebastian Greger, David Shanske and Chris Aldrich
webmention-for-comments pluginedit_webmention hook due comment array filteringcomment_author_url if not set.webmention_target_url and webmention_target_fragmentwebmention_post_id filter to a global function (thanks @dshanske)webmention_post_send (props to @snarfed)webmention_comment_parent filtertitle and content discoverywebmention_links filterpublish_post_hook functiontitle and content discoverywebmention_links filterpublish_post_hook functioninitial release
| Version | Download | Type |
|---|---|---|
| 5.11.0 | Download | Stable |
| 5.10.2 | Download | Stable |
| 5.10.1 | Download | Stable |
| 5.10.0 | Download | Stable |
| 5.9.1 | Download | Stable |
| 5.9.0 | Download | Stable |
| 5.8.1 | Download | Stable |
| 5.8.0 | Download | Stable |
| 5.7.0 | Download | Stable |
| 5.6.2 | Download | Stable |
| 5.6.1 | Download | Stable |
| 5.6.0 | Download | Stable |
| 5.5.0 | Download | Stable |
| 5.4.1 | Download | Stable |
| 5.4.0 | Download | Stable |
| 5.3.3 | Download | Stable |
| 5.3.2 | Download | Stable |
| 5.3.1 | Download | Stable |
| 5.3.0 | Download | Stable |
| 5.2.6 | Download | Stable |
| 5.2.5 | Download | Stable |
| 5.2.4 | Download | Stable |
| 5.2.3 | Download | Stable |
| 5.2.2 | Download | Stable |
| 5.2.1 | Download | Stable |
| 5.2.0 | Download | Stable |
| 5.1.9 | Download | Stable |
| 5.1.8 | Download | Stable |
| 5.1.7 | Download | Stable |
| 5.1.6 | Download | Stable |
| 5.1.5 | Download | Stable |
| 5.1.4 | Download | Stable |
| 5.1.3 | Download | Stable |
| 5.1.2 | Download | Stable |
| 5.1.1 | Download | Stable |
| 5.1.0 | Download | Stable |
| 5.0.0 | Download | Stable |
| 4.0.9 | Download | Stable |
| 4.0.8 | Download | Stable |
| 4.0.7 | Download | Stable |
| 4.0.6 | Download | Stable |
| 4.0.5 | Download | Stable |
| 4.0.4 | Download | Stable |
| 4.0.3 | Download | Stable |
| 4.0.2 | Download | Stable |
| 4.0.1 | Download | Stable |
| 4.0.0 | Download | Stable |
| 3.8.11 | Download | Stable |
| 3.8.10 | Download | Stable |
| 3.8.9 | Download | Stable |
| 3.8.8 | Download | Stable |
| 3.8.7 | Download | Stable |
| 3.8.6 | Download | Stable |
| 3.8.5 | Download | Stable |
| 3.8.4 | Download | Stable |
| 3.8.2 | Download | Stable |
| 3.8.1 | Download | Stable |
| 3.8.0 | Download | Stable |
| 3.7.0 | Download | Stable |
| 3.6.0 | Download | Stable |
| 3.5.0 | Download | Stable |
| 3.4.1 | Download | Stable |
| 3.4.0 | Download | Stable |
| 3.3.0 | Download | Stable |
| 3.2.1 | Download | Stable |
| 3.2.0 | Download | Stable |
| 3.1.1 | Download | Stable |
| 3.1.0 | Download | Stable |
| 3.0.1 | Download | Stable |
| 3.0.0 | Download | Stable |
| 2.6.1 | Download | Stable |
| 2.6.0 | Download | Stable |
| 2.5.0 | Download | Stable |
| 2.4.0 | Download | Stable |
| 2.3.4 | Download | Stable |
| 2.3.3 | Download | Stable |
| 2.3.1 | Download | Stable |
| 2.3.0 | Download | Stable |
| 2.2.0 | Download | Stable |
| 2.1.4 | Download | Stable |
| 2.1.3 | Download | Stable |
| 2.1.2 | Download | Stable |
| 2.1.1 | Download | Stable |
| 2.1.0 | Download | Stable |
| 2.0.1 | Download | Stable |
| 2.0.0 | Download | Stable |
| Development | Download | Trunk |