Threaded Replies and Comments with Webmentions in WordPress

Introduction to what one would consider basic web communication

A few days ago I had written a post on my website and a colleague had written a reply on his own website. Because we were both using the W3C Webmention specification on our websites, my site received the notification of his response and displayed it in the comments section of my website. (This in and of itself is really magic enough–cross website @mentions!)

To reply back to him I previously would have written a separate second post on my site in turn to reply to his, thereby fragmenting the conversation across multiple posts and making it harder to follow the conversation. (This is somewhat similar to what Medium.com does with their commenting system as each reply/comment is its own standalone page.)

Instead, I’ve now been able to configure my website to allow me to write a reply directly to a response within my comments section admin UI (or even in the comments section of the original page itself), publish it, and have the comment be sent to his reply and display it there. Two copies for the price of one!

From the comments list in my Admin UI, I can write a reply and it not only lives on my site but it can now be sent as a comment to the site that made the original comment! As an example, here’s my first one and the resultant copy on the site I was replying to.

This means that now, WordPress-based websites (at least self-hosted versions running the WordPress.org code) can easily and simply allow multiple parties to write posts on their own sites and participate in multi-sided conversations back and forth while all parties maintain copies of all sides of the conversation on their own websites in a way that maintains all of the context. As a result, if one site should be shut down or disappear, the remaining websites will still have a fully archived copy of the entire conversation thread. (Let’s hear it for the resilience of the web!)

What is happening?

This functionality is seemingly so simple that one is left wondering:

  • “Why wasn’t this baked into WordPress (and the rest of the web) from the start?”
  • “Why wasn’t this built after the rise of Twitter, Facebook, or other websites which do this as a basic function?”
  • “How can I get it tout suite?!” (aka gimme, gimme, gimme, and right now!!!)

While seeming simple, the technical hurdles aren’t necessarily because there had previously never been a universal protocol for the web to allow it. (The Webmentions spec now makes it possible.) Sites like Facebook, Twitter, and others enable it because they’ve got a highly closed and highly customized environment that makes it a simpler problem to solve. In fact, even old-school web-based bulletin boards allowed this!

But even within social media one will immediately notice that you can’t use your Facebook account to reply to a Twitter account. And why not?! (While the web would be far better if one website or page could talk to another, these sites don’t for the simple economic reason that they want you using only their site and not others, and not enabling this functionality keeps you locked into what they’re selling.)

I’ll detail the basic set up below, but thought that it would be highly illustrative to have a diagram of what’s physically happening in case the description above seems a bit confusing to picture properly. I’ll depict two websites, each in their own column and color-coded so that content from site A is one color while content from site B is another color.

A diagram of where comments live when sent via webmention.
Each site composes and owns its own content and sends the replies to the other site.

It really seems nearly incomprehensible to me how this hasn’t been built into the core functionality of the web from the beginning of at least the blogosphere. Yet here we are, and somehow I’m demonstrating how to do this from one WordPress site to another via the open web in 2017. To me this is the entire difference between a true Internet and just using someone else’s intranet.

Implementation

Prerequisites

While this general functionality is doable on any website, I’ll stick to enabling it specifically on WordPress, a content management system that is powering roughly 30% of all websites on the internet. You’ll naturally need your own self-hosted WordPress-based website with a few custom plugins and a modern semantic-based theme. (Those interested in setting it up on other platforms are more than welcome to explore the resources of the IndieWeb wiki and their chat which has a wealth of resources.)

Plugins

As a minimum set you’ll want to have the following list of plugins enabled and configured:

Other instructions and help for setting these up and configuring them can be found on the IndieWeb wiki, though not all of the steps there are necessarily required for this functionality.

Themes

Ideally this all should function regardless of the theme you have chosen, but WordPress only provides the most basic support for microformats version 1 and doesn’t support the more modern version 2 out of the box. As a result, the display of comments from site to site may be a bit wonky depending on how supportive your particular theme is of the microformats standards. As you can see I’m using a relatively standard version of the TwentySixteen theme without a lot of customization and getting some reasonable results. If you have a choice, I’d recommend one of the following specific themes which have solid semantic markup:

Plugin

The final plugin that enables sending comments from one comment section to another is the WordPress Webmention for Comments plugin. As it is still somewhat experimental and is not available in the WordPress repository, you’ll need to download it from GitHub and activate it. That’s it! There aren’t any settings or anything else to configure.

Use

With the plugin installed, you should now be able to send comments and replies to replies directly within your comments admin UI (or directly within your comments section in individual pages, though this can not require additional clicks to get there, but you also don’t have the benefit of the admin editor either).

There is one current caveat however. For the plugin to actually send the webmention properly, it will need to have a URL in your reply that includes the microformats u-in-reply-to class. Currently you’ll need to do this manually until the plugin can properly parse and target the fragmentions for the comments properly. I hope the functionality can be added to the plugin to make the experience seamless in the future.

So what does this u-in-reply-to part actually look like? Here’s an example of the one I used to send my reply:

<a class="u-in-reply-to" href="https://islandinthenet.com/manually-adding-microfomats-markup/">Khürt</a>

The class tells the receiving site that the webmention is a reply and to display it as such and the URL is necessary for your webmention plugin to know where to send the notification. You’d simply need to change the URL and the word (or words) that appear between the anchor tags.

If you want to have a hidden link and still send a webmention you could potentially add your link to a zero width space as well. This would look like the following:

<a class="u-in-reply-to" href="http://www.example.com">&​#8203;​</a>

Based on my experiments, using a <link> via HTML will work, but it will send it as a plain webmention to the site and it won’t show up natively as a reply.

Sadly, a plain text reply doesn’t work (yet), but hopefully some simple changes could be made to force it to using the common fragmentions pattern that WordPress uses for replies.

Interestingly this capability has been around for a while, it just hasn’t been well documented or described. I hope now that those with WordPress sites that already support Webmentions will have a better idea what this plugin is doing and how works.

Future

Eventually one might expect that all the bugs in the system get worked out and the sub-plugin for sending comment Webmentions will be rolled up into the main Webmentions plugin, which incidentally handles fragmentions already.

Caveats

In addition to the notes above, I will say that this is still technically experimental code not running on many websites, so its functionality may not be exact or perfect in actual use, though in experimenting with it I have found it to be very stable. I would recommend checking that the replies actually post to the receiving site, which incidentally must be able to accept webmentions. If the receiving website doesn’t have webmention support, one will need to manually cut and paste the content there (and likely check the receive notification of replies via email, so you can stay apprised of future replies).

You can check the receiving site’s webmention support in most browsers by right clicking and viewing the pages source. Within the source one should see code in the <head> section of the page which indicates there is a webmention endpoint. Here is an example of the code typically injected into WordPress websites that you’d be looking for:

<link rel="webmention" href="http://example.com/wp-json/webmention/1.0/endpoint" />
<link rel="http://webmention.org/" href="http://example.com/wp-json/webmention/1.0/endpoint" />

Also keep in mind that some users moderate their comments, so that even though your mention was sent, they may need to approve it prior to it displaying on the page.

If you do notice problems or issues or have quirks, please file the issue with as full a description of what you did and what resulted as you can so that it can be troubleshot and made to work not only for you, but hopefully work better for everyone else.

Give it a try

So you’ve implemented everything above? Go ahead and write a reply on your own WordPress website and send me a webmention! I’ll do my best to reply directly to you so you can send another reply to make sure you’ve got things working properly.

Once you’re set, go forward and continue helping to make the web a better place.

Special Thanks

I wanted to take a moment to give special thanks to Aaron Parecki, Matthias Pfefferle, and David Shanske who have done most of the Herculean work to get this and related functionality working. And thanks also to all who make up the IndieWeb community that are pushing the boundaries of what the web is and what it can accomplish. And finally, thanks to Khürt Williams who became the unwitting guinea pig for my first attempt at this. Thank you all!

​​​​​​

Reply to Creating an Archive of a Set of Tweets by Aaron Davis

Replied to Creating an Archive of a Set of Tweets by Aaron DavisAaron Davis (collect.readwriterespond.com)
I really like Barnes’ intent to share. I just wonder if there is a means of owning these notes. Ideally, taking a POSSE approach, she might live blog and post this to Twitter. I vaguely remember Chris Aldrich sharing something about this recently, but the reference escapes me. This is also limited with her blog being located at WP.com. I therefore wondered about the option of pasting the content of the tweets into a blog as an archive.
Aaron, the process I use for taking longer streams of Tweets to own them (via PESOS) has Kevin Marks‘ excellent tool Noter Live at its core. Noter Live allows you to log in via Twitter and tweet(storm) from it directly. As its original intent was for live-tweeting at conferences and events, it has some useful built in tools for storing the names of multiple speakers (in advance, or even quickly on the fly) as well as auto-hashtagging your conversation. (I love it so much I took the time to write and contribute a user-manual.)

The best part is that it not only organically threads your tweets together into one continuing conversation, but it also gives you a modified output including the appropriate HTML and microformats classes so that you can cut and paste the entire thread and simply dump it into your favorite CMS and publish it as a standard blog post. (It also strips out the hashtags and repeated speaker references in a nice way.) With a small modification, you can also get your site to add hovercards to your post as well. I’ll also note in passing that it’s also been recently updated to support the longer 280 characters too.

The canonical version I use as an example of what this all looks like is this post: Notes from Day 1 of Dodging the Memory Hole: Saving Online News | Thursday, October 13, 2016.

Another shorter tweetstorm which also has u-syndication links for all of the individual tweets can be found at Indieweb and Education Tweetstorm. This one has the benefit of pulling in all the resultant conversations around my tweetstorm with backfeed from Brid.gy, though they’re not necessarily threaded properly in the comments the way I would ultimately like. As you mention in the last paragraph that having the links to the syndicated copies would be useful, I’ll note that I’ve already submitted it as an issue to Noter Live’s GitHub repo. In some sense, the entire Twitter thread is connected, so having the original tweet URL gives you most of the context, though it isn’t enough for all of the back feed by common methods (Webmentions+Brid.gy) presently.

I’ll also note that I’ve recently heard from a reputable source about a WordPress specific tool called Publishiza that may be useful in this way, but I’ve not had the chance to play with it yet myself.

 

Clearly, you can embed Tweets, often by adding the URL. However, there are more and more people deleting their Tweets and if you embed something that is deleted, this content is then lost. (Not sure where this leaves Storify etc.)

It’s interesting that you ask where this leaves Storify, because literally as I was reading your piece, I got a pop-up notification announcing that Storify was going to be shut down altogether!! (It sounds to me like you may have been unaware when you wrote your note. So Storify and those using it are in more dire circumstances than you had imagined.)

It’s yet another reason in a very long list why one needs to have and own their own digital presence.

As for people deleting their tweets, I’ll note that by doing a full embed (instead of just using a URL) from Twitter to WordPress (or using Noter Live), that the original text is preserved so that even if the original is deleted, a full archival copy of the original still exists.

Also somewhat related in flavor for the mechanism you’re discussing, I also often use Hypothesis to comment on, highlight, and annotate on web pages for academic/research uses. To save these annotations, I’ll add hashtags to the annotations within Hypothesis and then use Kris Shaffer’s excellent Hypothesis Aggregator plugin to parse the data and pull it in the specific parts I want. Though here again, either Hypothesis as a service or the plugin itself may ultimately fail, so I will copy/paste the raw HTML from its output to post onto my site for future safekeeping. In some sense I’m using the plugin as a simple tool to make the transcription and data transport much easier/quicker.

I hope these tips make it easier for you and others to better collect your content and display it for later consumption and archival use.

It’s not the bigger Twitter quit I’ve been debating for a while, but I’ve just taken the intermediate step of removing the Twitter app and its notifications from my phone. I’m going to be using a handful of feed readers to more purposefully consume curated content in the coming year.

I’ll still syndicate content into Twitter and can use my own website to receive @mentions, comments, and likes, so I won’t really be going anywhere. But I will be leaving behind a lot of the curation, maintenance, poor trained/engrained behaviors, as well as a lot of content that really isn’t doing me much good.

In particular, leaving behind a lot of the toxic content makes me feel lighter and happier already.

h/t Richard MacManus and Jonathan LaCour in the past few hours among many, many others in the near past.

Reply to doesn’t link back by Khürt Williams

Replied to doesn’t link back by Khürt Williams (Island in the Net)
I ran my domain through IndieWebify.me. Almost all of the rel=“me” links either don’t link back or couldn’t be fetched. The following work perfectly and can be used with the IndieAuth authentication plug-in. GitHub Flickr Goodreads Twitter That’s 4 out of 43.
Khürt , The majority of them don’t link back because the silos (like Keybase, Instagram, and Medium which you mention) aren’t putting the rel=”me” microformat on the URLs in your profile like Twitter, Github, and Flicker do. If you view the page source for those silos, you’ll see that they list your URL, but don’t have rel-me’s pointing back at you. Sadly, you can’t control these, though you could file issues with the sites that don’t to encourage them to.

The indiewebify.me site has a parser that is looking at the two sites to see that they not only point at each other, but it requires that the two links have the rel=”me” microformat on them. Most don’t, but this doesn’t mean too much in practice. Whether or not they both have rel=”me”, the only way both sites could point at each other indicates that you “own” or control them both. Kevin marks has proposed/built an interesting decentralized verification service based on them. His version is certainly much better distributed than Twitter’s broken verification set up.

Other than having a stronger two-way ownership indicator, what do you get out of them? As you mention, some have the ability to be used with IndieAuth. Those that can be used with IndieAuth are relying on the service (like Twitter or Github) having a OAuth implementation for signing into their services. This allows an indie site to piggyback on another services’ OAuth implementation without having to go through the trouble to build one themselves, which can be a lot of work to do, much less do correctly (securely). Most of the services you see not linking back not only don’t add the rel=”me” tag, but they also don’t support OAuth, so you wouldn’t get too much more out of having the correct reciprocal link anyway.

Incidentally, one of the benefits the rel=”me” links do have is that they allow you to use your website to log into the IndieWeb wiki to participate directly in that part of the community. (Give it a try!)

Some services like Brid.gy get around services like Instagram or Facebook not having a physical rel=”me” microformat because they’re relying on looking at the appropriate data (usually via API) on your profile page to see if it links back (either in your website field or typically in your bio).

Don’t be overly concerned that the vast majority of sites appear not to link back even if you’ve got links on both pointing back. (And if you think your batting average is bad with only 4 of 43, just imagine how many of my 200+ sites do?!)

If you want to see an interesting tech-forward application of rel=”me” and the XFN friends network, take a peek at Ryan Barrett’s Indie Map which he unveiled over the summer:

Some of these building blocks will likely add a lot more value later on as more and more sites explicitly indicate their relationship to and from each other.

I really love that I can post an event on my website and people can use their own websites to RSVP to it. It’s so simple, but it feels so magical.

Even better, the Webmention plugin and the Semantic Linkbacks plugin allows for a beautiful display of the responses.
FTW!

Facepiled RSVPs for vHWC

Thanks David Shanske, Matthias Pfefferle, Ryan Barrett, and everyone else in the IndieWeb community who has either helped to create and/or  supports the web standards that allow for the internet to work the way one expects it should.

Want to try it out? Visit the event post for instructions. You can also RSVP on the copy I syndicated to Facebook and your response will show up on the list on my site as well.

 

Reply to Aggregating the Decentralized Social Web by Jason Green

Replied to Aggregating the Decentralized Social Web by Jason Green (þoht-hord)
There are actually three problems to solve, reading, which is relatively easy, posting, which is harder, and social graph management, which is quite complex.
Some brief thoughts:

There are actually three problems to solve, reading, which is relatively easy, posting, which is harder, and social graph management, which is quite complex.

I might submit that posting is possibly the easiest of the three and that the reader problem is the most difficult. This is based on the tremendous number of platforms and CMSs on which one can post, but the dearth of feed readers in existence.

Managing your social graph

Something akin to a following list could help this. Or a modified version of OPML subscription lists could work. They just need to be opened up a tad. Some are working on the idea of an open microsub spec which could be transformative as well: https://indieweb.org/Microsub-spec


How do we decentralize the web without so decentralizing our own social presence that it becomes unmanageable?

You’ve already got a huge headstart in doing this with your own website. Why bother to have thousands of accounts (trust me when I say this) when you could have one? Then, as you suggest, password protected RSS (or other) feeds out to others could allow you to control which audiences get to see which content on your own site.


It looks as if Withknown has made some progress in this area with syndication plugins.

WordPress has lots of ways to syndicate content too. Ideally if everyone had their own website as a central hub, the idea of syndication would ultimately die out altogether. At best syndication is really just a stopgap until that point.


Subscribing to my personal timeline(s) with my favorite RSS reader would bring everything together,

I’ve written some thoughts about how feed readers could continue to evolve for the open web here: http://boffosocko.com/2017/06/09/how-feed-readers-can-grow-market-share-and-take-over-social-media/


listed items chronologically independent of source

Having a variety of ways to chop and dice up content are really required. We need more means of filtering content, not less. I know many who have given up on chronological feed reading. While it can be nice, there are many other useful means as well.

Virtual Homebrew Website Club Meetup on December 13, 2017

This is a Virtual HWC for IndieWebbers who either can’t make a regular meeting or don’t yet have critical mass to host one in their area. Everyone is welcome to participate remotely!

Virtual Homebrew Website Club Meetup on December 13, 2017
Time:  to
Location: Online via Google Hangouts (link is posted and live)

Details

Join a community with like-minded interests. Invite friends that want a personal site.

  • Work on your IndieWeb Resolutions for 2018
  • Finish that blog post you’ve been working on
  • Demos of recent IndieWeb breakthroughs
  • Share what you’ve gotten working
  • Ask the experts questions

A link to virtual meetup on Google Hangouts will be posted on the day of the event. Check back before the meeting to get the link: https://hangouts.google.com/call/0JCH5b875C2UNseSnfkxAAEE

Optional quiet writing hour: 19:30–20:30 ET (16:30-17:30 PT)
Meetup: 20:30–21:30 ET (17:30-18:30 PT)

The IndieWeb is a growing people-focused alternative to the ‘corporate web’.

Skill levels: Beginner, Intermediate, Advanced

Keep in mind that there is often a European virtual meetup if those times work better for your schedule.

Any questions? Need help? Ask in chat: http://indiewebcamp.com/irc/today#bottom

RSVP

Add your RSVP in the comments below; by adding your indie RSVP via webmention to this post; or by RSVPing yes to one of the syndicated posts below
Indieweb.org event: https://indieweb.org/events/2017-12-13-homebrew-website-club#Virtual_Americas
Facebook.com: https://www.facebook.com/events/169650146961455/
Meetup.com: https://www.meetup.com/IndieWeb-Homebrew-Website-Club-Los-Angeles/events/245539015/

If your site doesn’t support sending webmentions yet, you should be able to create a post on your website with the following HTML:

<div class="h-entry">
RSVP <span class="p-rsvp">yes</span>
to <a href="http://boffosocko.com/2017/11/30/virtual-homebrew-website-club-meetup-on-december-13-2017/" class="u-in-reply-to">Virtual Homebrew Website Club Meetup on December 13, 2017</a>
</div>

Then put the permalink URL for your post into the webmentions box in the comments section. My site should be able to parse your URL and display the response. (Naturally, you can also change your response to “no” or “maybe” depending on your ability to attend.)

(I think this may be my first indie event that I’ve posted to my WordPress site.)

👓 Woman Fired For Flipping Off Trump’s Motorcade | Huffington Post

Read Woman Fired For Flipping Off Trump's Motorcade by Jennifer Bendery (HuffPost)
A photo of Juli Briskman giving the middle finger to the president went viral. Her employer was not pleased.
The note about the fellow male worker not being treated equally when his overstep actually featured his employer is a bit infuriating. The worst part is that their action brought new fire to the story and they Barbara Streisand-ed themselves at the same time.

👓 Twitter Sidestepped Russian Account Warnings, Former Worker Says | Bloomberg

Read Twitter Sidestepped Russian Account Warnings, Former Worker Says (Bloomberg.com)
In 2015, a manager discovered a trove of accounts with Russian and Ukrainian IP addresses
The Russian part and the election part completely aside, having product security subservient to growth is completely the wrong way to build any product.

 

👓 Content, bloat, privacy, archives | Peter Molnar

Read Content, bloat, privacy, archives by Peter MolnarPeter Molnar (petermolnar.net)
I spent a lot of time trying centralising my online activities, including adding bookmarks and imports from social networks. Lately my site looked bloated and unmaintainable. I started questioning what data is my data, what data should or could I own - it was time to rethink some ideas.
Peter has some solid thoughts here on some subtle uses of things including likes, favorites, and bookmarks. I particularly like the way he separates out and describes the “vote” intent of likes on various platforms.

Somewhat like him, I’m bookmarking things I’d like to read privately on the back end of my site, and then only selectively posting them as read posts when I’ve done that. Archiving them to the Internet Archive has been useful for cutting down on the data I’m keeping, but saving them does allow me to browse through my commonplace book frequently when I need to find something and couldn’t find it otherwise.

Some of this reminds me of the way I use the “star” functionality on Twitter (I still think of it as a star and not a heart). I don’t typically use it to mean anything in particular on Twitter itself. Instead I’m using that functionality in conjunction with an IFTTT recipe to bookmark things I’d like to read later. So in a larger sense, I’m using Twitter as a headline feed reader and marking all the things I’d like to come back and read at a later time.

Once in a blue moon, during a chat with others on Twitter, I may use the heart as an indicator to the other party that I’ve seen/read their post, particularly when I don’t intend to reply to the last in a chain of conversation. This type of ephemera or digital exhaust generally isn’t something I find useful for keeping in the long term, so like Peter I typically don’t keep/archive them on my site.

For those who haven’t read them yet, Sebastiaan Andewe has a recent article covering similar ground: Thinking about bookmarks and likes on the IndieWeb.

I find these discussions useful for thinking through what I’m doing on my own site and refining how I use it as well.​​​​

The Presentation of Self on a Decentralised Web by Dr. Amy Guy

Bookmarked The Presentation of Self on a Decentralised Web by Dr. Amy Guy (rhiaro.github.io)
Many people express themselves online through social media, blogs, personal websites, and the like. Using these technologies affects our day-to-day lives, and sense of self. These technologies also change and develop in response to how people use them. Many of the tools we use come with constraints, and people often find ways to work around these constraints to suit their needs. This thesis explores the different ways in which people express their identities using contemporary Web technologies. We conduct several studies, and show that there are many interdependent factors at play when it comes to online self-presentation, and that it is rare that all of these are considered when studying or designing social systems. We present a conceptual framework which will enable cohesive further research in this area, as well as guidance for future system designs. In the second part, we discuss how these technologies are changing. We make contributions to an emerging alternative means of engaging with social media and similar technologies, and examine the implications of these new technologies on self-presentation.
Congratulations Dr. Guy! I can’t wait to read your thesis…

There may possibly be some other much older IndieWeb related doctoral theses out there, but I suspect this may be the first in the new era…

If nothing else, you’ve got to love a thesis that’s got it’s own custom short link-style domain: dr.amy.gy ​​​​

👻 ☠️ 🎃 Halloween flavored names on Twitter

Everyone I know has jumped on the Halloween bandwagon on Twitter and added one or more Halloween related emoji to their Twitter name. Jack-o-lanterns, ghosts, etc. abound. Some have even changed their names a bit to fit into the theme.

Some of my favorites:

@JordanUhl is now jordan ghoul 👻 ☠️ 🎃
@rachsyme‏ is now🎃 rachel slime 🎃
@VictoriaAveyard is Victoria Graveyard 🎃
@BrendonHope is 🎃 Abandon Hope 🎃
@spicer‏ is Christian Spider 🕷 🎃
@Juliet_Shen‏ is 🎃 Ghouliet Shen 🎃

Despite the fact that Halloween is my favorite holiday, and since retailers are already jumping the gun on Christmas, I thought I’d do the same. I’m changing my Twitter name to something like:

🎄Christmas🎄 🎅Aldrich 🎁