I’ve been posting “read” posts/notes/links–reads, for simplicity– to my own website for a while to indicate articles and material which I’ve spent the time to read online (and oftentimes even offline). While I automatically send notifications (via webmentions or trackbacks/pingbacks) to notify the original articles, few sites know how to receive them and even less actively display them.
It’s only in the last few weeks that my site has actively begun receiving these read posts, and I have to say it’s a really lovely and heartwarming experience. While my site gets several hundreds of hits per day, and even comments, likes and other interactions, there’s just something additionally comforting in knowing that someone took the time to read some of my material and posted that fact to their own website as a reminder to themselves as well as a signal to others.
Mentally there’s a much larger value in receiving these than likes or tweets with links from Twitter, in part because there’s a larger indicator of “work” behind these signals. They’re not simply an indicator that “I saw the headline of this thing somewhere and shared it because the friction of doing so was ridiculously low”, but they represent a lot of additional time, effort, and energy and thus are a stronger and more valuable signal (both to me and hopefully to others.)
I suppose I’ll eventually need to preface that these are especially interesting to me now when I’m only getting small numbers of them from particular people who I know are deeply engaging with specific portions of my past work. I can also imagine a day when these too may become spam-like, and I (or others) are inundated with them. But for now I’ll just revel in their joyous, little warmth.
It’s interesting from my website’s administrative interface to see the path individuals are taking through my thoughts and which topics they may find interesting. I don’t think that many (any?) social media silos provide these types of views which may actually help to spark future conversations based on our shared interests.
Of course I must also admit that, as nice as these read notifications have been, they actually pale in comparison to the rest of the work that the particular sender has been doing in replicating large portions of the sorts of things I’m doing on and with my website. I hope all of our work, experimenting, and writing is infectious and will help others out in the future.
Well, that was weird.
Something had gone wrong with my little PHP script for adding items from my list at reading.am to my WithKnown-powered stream. It ran, reported no errors, and yet produced nothing at the other end. Gorgeous Saturday morning, blue skies and sunshine; what better way to spend it than indoors debugging?
It’s always nice if you can provide real-time active tracking and posting on your own website, but is it really necessary? Is it always worthwhile? What value does it provide to you? to others?
The other day I read Eddie Hinkle’s article Passive Tracking > Active Tracking in which he details how he either actively or passively tracks on his own website things he’s listening to or watching. I thought I’d take a moment to scribble out some of my thoughts and process for how and why I do what I’m doing on my own site.
I too track a lot of things relatively passively. Most of it I do for my own “diary” or commonplace book. Typically I’ll start out using silo services that have either RSS feeds or that work with services like IFTTT.com or Zapier. If those don’t exist, I’ll just use the ubiquitous “share” functionality of nearly all web pages and mobile platforms to share the content or page via email which I can use to post to my website as well. The primary minimal data points I’m looking for are the title of the specific thing I’m capturing (the movie, tv show/episode title, book title, article title, podcast title) and the date/time stamp at which the activity was done.
I’ll use these to take input data and transfer it to my own website, typically in draft form. In many cases, these methods collect all the data I want and put it into a format for immediate sharing. Other times I’ll clean up some bits of the data (almost always context related, so things like images, summaries, the source of the data, etc.) a bit before sharing. Then I optionally decide to post it either publicly or privately on my site.
Some of the sources I use for pulling in data (especially for context) to my website include: Watches: IMDb.com, Letterboxd, TheTVDB.com, themoviedb.org, direct websites for shows/movies themselves Listens: typically using share functionality via email from my podcatcher; Spotify, Last.fm, Reads: reading.am, Pocket, Hypothes.is, GoodReads, Bookmarks: diigo, Hypothes.is, Twitter, Pocket
Often, going the route of least resistance for doing this sort of tracking is a useful thing to find out if doing so is ultimately useful or valuable to you. If it’s not, then building some massive edifice and code base for doing so may be additional sunk cost to find out that you don’t find it valuable or fulfilling somehow. This is primary value of the idea “manual until it hurts.”
I will note that though I do have the ability to do quick posting to my site using bookmarklets in conjunction with the Post Kinds Plugin for WordPress, more often than not, I find that interrupting my personal life and those around me to post this way seems a bit rude. For things like listen posts, logging them actively could a be a life threatening endeavor because I most often listen while driving. Thus I prefer to take a moment or two to more subtly mark what I want to post and then handle the rest at a more quiet and convenient time. I’ll use down time while passively watching television or listening to music to do this sort of clean up. Often, particularly for bookmarks and annotations, this also forces me to have a second bite at the proverbial apple to either follow up on the bookmarked idea or think about and reflect on the thing I’ve saved. In some sense this follow up is way more valuable to me than having actively posted it and then simply moving on. It also becomes a way for what might otherwise be considered “digital exhaust” to give me some additional value.
Eventually having better active ways to track and post these things in real time would be nice, but the marginal additional value just hasn’t seemed to be there for me. If it were, there are also larger hurdles of doing these posts quickly and in a way that pulls in the context portions I’d like to present. Adding context also generally means having solid pre-existing data bases of information from which to poll from, and often these can be difficult to come by or require API access to something. As a result services like Swarm and OwnYourSwarm are useful as they can not only speed up the process of logging data, but they are underpinned with relatively solid databases. As an example, I frequently can’t use IMDB.com to log in television shows like Meet the Press or Face the Nation because entries and data for those particular episodes often don’t exist even when I’m watching them several hours after they’ve aired. And even in these cases the websites for these shows often don’t yet have photos, synopses, video, or transcripts posted when I’m watching them. Thus posting for these in real-time the way I’d like becomes a much more difficult nightmare and requires a lot more manual effort.
I follow a few people who do this too, sometimes pretty publicly. I’m not sure that I’d want to share everything I consume, but I do like the thought of capturing, and aggregating everything.
I’m just not too sure how to pull it all together, if I were to do this.
There are a few parts to having a media diet:
1. keeping track of it all quickly and easily;
2. going back to contemplate on it and deciding what may have been worthwhile or not; and
3. using the above to improve upon your future media diet instead of consuming the same junk food in the future.
I try to use my own website (cum digital commonplace book) to collect everything quickly using bookmarklets from the Post Kinds plugin or RSS feeds from popular media-related websites (GoodReads, Letterboxd, reading.am, etc.) in conjunction with IFTTT.com recipes to create private posts on my site’s back end. Naturally, not all of my posts are public since many are simply for my own reflection and edification. Usually logging the actions only takes a few seconds. Longer reviews and thoughts typically only take a few minutes if I choose to do so.
The hardest part may be going through it all on a weekly, monthly, or annual basis to do some analysis and make the appropriate adjustments for the future. (Isn’t it always sticking with the adjustments that make it a “diet”?) Fortunately having all the data in one centralized place does make some of this work a lot easier.
Having lists of what I read online has definitely helped me cut out all click-baity articles and listicles from my information diet. It’s also helped me cut down on using social media mindlessly when I think about the great things I could be reading or consuming instead. Bad national news has also spurred me to read more local news this year as well. Those interested in some of these ideas may appreciate Clay A. Johnson’s The Information Diet: A Case for Conscious Comsumption, which I read several years back.
I experimented with eating and drinking posts early last year too, and the nature of posting them publicly was somewhat useful in losing about 10 pounds, but the work in doing it all did seem a bit much since I didn’t have as easily an automated system for doing it as I might have liked. Now I do most of these posts privately. Definitely having the ability to look back at the ton of crap I’ve eaten in the past week or month does help with trying to be a bit healthier in my choices. I look at posting photos of my food/drink to my own site somewhat akin to dietitians who tell people to use a clean plate for every meal they have–the extra work, process, and clean up makes it more apparent what you’re doing to yourself.
As I’ve written before about posting what I’m listening to, showing others that you’ve spent the time to actually listen to it and post about it on your own site (even with no commentary), is a great way to show that you’ve got “skin-in-the-game” when it comes to making recommendations. Kottke’s awesome recommendation about listening to the Seeing White Podcast has way more value if he could point to having spent the multiple hours listening to and contemplating it, the way I have. The situation is akin to that headline and link my friend just put on Twitter, but did she think the headline was cool or did she actually read the entire thing and wanted to recommend her followers also read it? Who can tell without some differentiation?
Lastly, I keep a “following page” of people and feeds I’m following on a regular basis. Put into broad categories, it makes an easy method for periodically pruning out that portion of my media diet using OPML subscriptions in my feed reader.
In the end, what you feed your body, as well as what you feed your brain, are important things to at least keep in the back of your mind.
I’ll have to work at getting better to create my own end-of-year statistics since my own website has a better accounting of what I’ve actually read (it isn’t all public) and bookmarked. I do like that their service does some aggregate comparison of my data versus all the other user data (anonymized from my perspective).
Pocket also does a relatively good job of doing discovery of good things to read based on aggregate user data in terms of categories like “Best of” and “Popular”. They also give me weekly email updates of things I’ve bookmarked there as reminders to go back and read them, which I find a useful functionality which they haven’t over-gamified. Presently my own closest functionality to this is to be subscribed to the RSS feed of my own public bookmarks in a feed reader (which I find generally useful) as well as regularly checking on my private bookmarks on my websites’s back end (something as easy as clicking on a browser bookmark) and even looking at my “on this day” functionality to review over things from years past.
I’ll note that I currently rely more on Nuzzle for real-time discovery on a daily basis however.
Greg McVerry might appreciate that they’re gamifying reading by presenting me with a badge.
As an aside while I’m thinking of it, it might be a cool thing if the IndieWeb wiki received webmentions, so that self-documentation I do on my own website automatically appeared on the appropriate linked pages either in a webmention section or perhaps the “See Also” section. If wikis did this generally, it would be a cool means of potentially building communities and fuelling discovery on the broader web. Imagine if adding to a wiki via Webmention were as easy as syndicating content to a site like IndieNews or IndieWeb.XYZ? It could also function as a useful method of archiving web content from original pages to places like the Internet Archive in a simple way, much like how I currently auto-archive my individual pages automatically on the day they’re published.
“It touches me that some people have been reading my blog for over a decade.” https://dri.es/forty I've been thinking about that since. It would be nice to know who is subscribed to your blog so you can build a relationship. #indieweb@davewiner
Happy birthday Dries! If I may, can I outline a potential web-based birthday present based on your wish?
With relation to your desire to know who’s subscribed and potentially reading your posts, I think there are a number of ways forward, and even better, ways that are within easy immediate reach using Drupal as well as many other CMSes using some simple web standards.
Not mentioned in that article for brevity is the ability to send notifications via Webmention when one makes follow or subscription posts.
As an example, I’ve created a follow post for you for which my site would have sent a Webmention. Unfortunately at the time, your site didn’t support receiving it, so you would have missed out on it unless you support older legacy specs like pingback, trackback, or refback.
I also created a larger related Following page of people and sites I’m subscribed to which also lists you, so you would have received another notification from it if you supported Webmention.
I’m unaware of anyone actually displaying these notifications on their website (yet!), though I’ve got some infrastructure on my own site to create a “Followed by” page which will store and show these follows or subscriptions. At present, they’re simply stored in my back end.
Heh – that’s funny – @lizzjoy and I were just saying we need to find a way of knowing who is reading the Drupal community and association blogrolls…
As for Rachel’s request, this too is also possible with “read” webmentions. I maintain a specific linkblog feed (RSS) with all of the online material I read. All of those posts send notifications to the linked sites. While it’s not widely supported by other platforms yet, there are a few which do, so that online publications can better delineate and display the difference between likes, bookmarks, reads, etc. There’s at least one online newspaper among 800+WordPress websites which support this functionality. I suspect that with swentel’s Drupal module and some code for supporting the proper microformats, this is a quick reality in the Drupal space as well. Because the functionality is built on basic web standards, it’s possible for any CMS to support them. All that’s left is to ramp up adoption.
I know the Like icon doesn’t show up in your feed reader (maybe that can change)
Interestingly, swentel’s module also supports Microsub, so that reader clients will allow one to like (bookmark, or reply to) posts directly within readers which will then send Micropub requests to one’s website to post them as well as to potentially send Webmention notifications. These pieces help to close the circle of posting, reading, and easily interacting on the open web the way closed silos like Facebook, Twitter, et al. allow.
I mention it because I was specifically intrigued by a small piece of excellent user interface and social graph data that Reading.am unearths for me. I’m including a quick screen capture to better illustrate the point. While the UI allows me to click yes/no (i.e. did I like it or not) or even share it to other networks, the thing I found most interesting was that it lists the other people using the service who have read the article as well. In this case it told me that my friend Jeremy Cherfas had read the article.1
The tougher follow up is: how could we create a decentralized method of doing this sort of workflow in a more IndieWeb way? It would be nice if my read posts on my site (and those of others) could be overlain on websites via a bookmarklet or other means as a social layer to create engaged discussion. Better would have been the ability to quickly surface his commentary, if any, on the piece as well–functionality which I think Reading.am also does, though I rarely ever see it. In some sense I would have come across Jeremy’s read post in his feed later this weekend, but it doesn’t provide the immediacy that this method did. I’ll also admit that I prefer having found out about his reading it only after I’d read it myself, but having his and others’ recommendations on a piece (by their explicit read posts) is a useful and worthwhile piece of data, particularly for pieces I might have otherwise passed over.
In some sense, some of this functionality isn’t too different from that provided by Hypothes.is, though that is hidden away within another browser extension layer and requires not only direct examination, but scanning for those whose identities I might recognize because Hypothes.is doesn’t have a specific following/follower social model to make my friends and colleagues a part of my social graph in that instance. The nice part of Hypothes.is’ browser extension is that it does add a small visual indicator to show that others have in fact read/annotated a particular site using the service.
I’ve also previously documented on the IndieWeb wiki how WordPress.com (and WordPress.org with JetPack functionality) facepiles likes on content (typically underneath the content itself). This method doesn’t take things as far as the Reading.am case because it only shows a small fraction of the data, is much less useful, and is far less likely to unearth those in your social graph to make it useful to you, the reader.
I seem to recall that Facebook has some similar functionality that is dependent upon how (and if) the publisher embeds Facebook into their site. I don’t think I’ve seen this sort of interface built into another service this way and certainly not front and center the way that Reading.am does it.
The closest thing I can think of to this type of functionality in the analog world was in my childhood when library card slips in books had the names of prior patrons on them when you signed your own name when checking out a book, though this also had the large world problem that WordPress likes have in that one typically wouldn’t have know many of the names of prior patrons necessarily. I suspect that the Robert Bork privacy incident along with the evolution of library databases and bar codes have caused this older system to disappear.
This general idea might make an interesting topic to explore at an upcoming IndieWebCamp if not before. The question is: how to add in the social graph aspect of reading to uncover this data? I’m also curious how it might or might not be worked into a feed reader or into microsub related technologies as well. Microsub clients or related browser extensions might make a great place to add this functionality as they would have the data about whom you’re already following (aka your social graph data) as well as access to their read/like/favorite posts. I know that some users have reported consuming feeds of friends’ reads, likes, favorites, and bookmarks as potential recommendations of things they might be interested in reading as well, so perhaps this would be an additional extension of that as well?
 I’ve certainly seen this functionality before, but most often the other readers are people I don’t know or know that well because the service isn’t huge and I’m not using it to follow a large number of other people.
 I knew he was generally interested already as I happen to be following this particular site at his prior recommendation, but the idea still illustrates the broader point.
The battle against the uncivil comments section is also a battle against high bounce rates for reallyread.it.
This is an intriguing little company. I could see this being some great opening infrastructure for creating read posts.
On my own website I’ve got a relative heirarchy of bookmarks, likes, reads, replies, follows, and favorites. (A read post indicates that I’ve actually read an entire piece–something I wish more websites and social platforms supported in lieu of allowing people to link or retweet content they haven’t personally vetted.) Because I’m posting this content on my personal site and it’s visible to others as part of my broader online identity I take it far more seriously than if I were tossing any old comment into an empty box on someone else’s website. To some extend this is the type of value that embedded comments sections for Facebook tries to enforce–because a commenter is posting using an identity that their friends, family, and community can see, there’s a higher likelihood that they’ll adhere to the social contract and be civil. I suspect that the Nieman Lab is using Disqus so that commenters are similarly tied to some sort of social identity, though in a world with easy-to-create-throw-away social accounts perhaps even this may not be enough.
While there’s a lot to be said about the technology and research that could be done with such a tool as outlined in the article, I think that it also ought to be bundled with people needing to use some part of their online social identities which they’re “stuck to” in some sense.
The best model I’ve seen for this in the web space is for journalism sites to support the W3C’s recommended Webmention specification. They post and host their content as always, but they farm out their comment sections to others by being able to receive webmentions. Readers will need to write their comments on their own websites or in other areas of the social web and then send webmentions back to the outlet which can then moderate and display them as part of the open discourse. While I have a traditional “old school” commenting block on my website, the replies and reactions I get to my content are so much richer when they’re sent via webmention from people posting on their own sites.
I’ve also recently been experimenting with some small outlets in allowing them to receive webmentions. They can display a wider range of reactions to their content including bookmarks, likes, favorites, reads, and even traditional comments. Because webmentions are two-way links they’re audit-able and provide a better monolithic means of “social proof” relating to an article than the dozens of social widgets with disjointed UI that most outlets are currently using.
I’m pleased to announce a new project I have been working on. indiebookclub is an app for keeping track of the books you are reading or want to read. It is primarily intended to help you own your data by posting directly to your own site with Micropub. If your site does not support Micropub yet, y...
This portends some awesome things to come. Can’t wait to get this working and see what pieces come along with it later. This is going to make it much easier to leave silos like GoodReads.com.
Syndicated copies to:
Testing out a new (secret) micropub client for read posts. It’s got way more functionality than I though it would have to start and has a stunning and clean UI. There are some smart choices all around and it’s naturally got some fantastic semantic markup hiding behind the curtains.
Even without the micropub portion it makes a fantastic microblog for those who are into reading.
More details later as I try to get all the moving pieces working properly.
The Post Kinds plugin, essentially an extended version of WordPress’s core Post Formats functionality, allows one to make a variety of types of posts on one’s website that mirrors the functionality provided in a huge variety of social media platforms. This is useful if you’re owning all of your own data and syndicating it out to social silos, but it’s also great for providing others better user interface for reading and consuming what you’re posting.
I’ve documented and written about it quite a bit in the past and am obviously a big fan. In addition to most of the default post types (notes, favorites, likes, bookmarks, reads, listens, etc.), my personal site also supports follows, eat, drink, wishes, acquisitions, exercise, and chickens! Wait a second… CHICKENS?!?
One of the nice benefits of the plugin is that it’s fantastically modular and extensible. As an exercise a few months back I thought I would take a shot at adding chicken post support to my website. Several years ago in the IndieWeb, partly as an educational exercise and partly for fun, several people thought it would be nice to add a post type of “chicken” to their sites. What would it look like? What would it entail? How might it evolve? Since then interest in chicken related posts has naturally waned, but it does bring up some interesting ideas about potential new pieces of functionality that one might want to have on their personal websites.
While I currently support many post types, I’ve discovered recently that I have a variety of notes and checkins that relate to items I’ve purchased or acquired. I thought it might be worthwhile to better keep track on my own website of things I acquired in a more explicit way to make posting them and searching for them a lot easier. But how could I do this myself and potentially contribute it back to a broader base of other users? I started with a bit of research on how others have done this in the past and tried to document a lot of it on the Indieweb wiki. I eventually asked David Shanske to reserve the idea of acquisitions within the Post Kinds plugin, which he did, but I wondered how I might have done some of that work myself.
So below, as an example, I thought I’d write up how I’ve managed to add Chicken posts to my website. To a great extent, I’m using data fields and pieces already built into the main plugin, but in doing this and experimenting around a bit I thought I could continue to refine chicken posts until they did what I wanted, after which, I could do a pull request to the main plugin and add support for others who might want it. Hopefully the code below will give people a better idea about how the internals of the plugin work so that if they want to add their own pieces to their sites or contribute back to the plugin, things might be a tad easier.
Pieces for a new Post Kind in WordPress
Adding a new Post Kind primarily consists of three broad pieces which I’ll address below. The modularity of the plugin makes adding most of the internals for a new kind far simpler than one might imagine.
Adding Taxonomy Support
New kinds in general will require a small handful of properties which include:
a name (as well as its singular, plural, and verb forms);
a format, so that the plugin can map the new post kind to a particular Post Format type within WordPress core so that themes which use these can be properly set when needed. Format options include: aside, image, video, quote, link, gallery, status, audio, and chat. Some post kinds may not have an obvious mapping, in which case the value can be left as empty;
a generic description for display within the admin user interface as well as for the archive pages for the type which are auto-generated;
a description-url, typically this is a link to the IndieWeb wiki that has examples and details for the particular post kind. If there isn’t one, you could easily create it and self-document your new use case. It could even be empty if necessary;
A show setting with a value of true or false to tell the plugin to default to showing the kind in the Post Kinds “Kinds” metabox so that the new kind will show up and be choose-able from within the interface when creating new posts.
Code to include these pieces of data will need to be added to the /includes/class-kind-taxonomy.php folder/file path within the plugin so that the plugin knows where it needs to be found.
As an example, here’s what the code looks like for the bookmark kind:
'bookmark' => array(
'singular_name' => __( 'Bookmark', 'indieweb-post-kinds' ), // Name for one instance of the kind
'name' => __( 'Bookmarks', 'indieweb-post-kinds' ), // General name for the kind plural
'verb' => __( 'Bookmarked', 'indieweb-post-kinds' ), // The string for the verb or action (liked this)
'property' => 'bookmark-of', // microformats 2 property
'format' => 'link', // Post Format that maps to this
'description' => __( 'storing a link/bookmark for personal use or sharing with others', 'indieweb-post-kinds' ),
'description-url' => 'http://indieweb.org/bookmark',
'show' => true, // Show in Settings
For direct comparison, and as an explicit example for my chicken post kind, here’s the block of code I inserted within the class-kind-taxonomy.php file immediately below the section for the acquisition type:
'chicken' => array(
'singular_name' => __( 'Chicken', 'indieweb-post-kinds' ), // Name for one instance of the kind
'name' => __( 'Chickens', 'indieweb-post-kinds' ), // General name for the kind plural
'verb' => __( 'Chickened', 'indieweb-post-kinds' ), // The string for the verb or action (liked this)
'property' => 'chicken-of', // microformats 2 property
'format' => 'image', // Post Format that maps to this
'description' => __( 'Owning all the chickens. Welcome to my chicken feed.', 'indieweb-post-kinds' ),
'description-url' => 'https://indieweb.org/chicken',
'show' => true, // Show in Settings
You’ll probably notice that beyond the simple cut and paste, I haven’t really changed much. Syntax aside, most of these pieces are relatively obvious and very straightforward, but I’ll add some commentary about a few parts and what they do which may not be as obvious to the beginner. When creating your own you can copy and paste this same block into the code at the bottom of the list of other types, but you’ll want to change only the data that appears within the single quotes on each of the nine lines for the various settings.
For those not familiar with microformats you may be asking yourself what snippet to add for the property setting. The best bet is to take a look at the microformats wiki or look for possible examples of people doing the same type of post you’re doing and copy their recommended microformat. For extremely new and likely experimental edge cases, chances are that you’ll need to choose your own experimental microformat name. In these instances you can use prior microformats as examples and potentially follow the format. In my case I knew about the bookmark-of, like-of, favorite-of, and the experimental read-of, listen-of, and watch-of microformats, so I followed the pattern and chose chicken-of for my experimental chicken posts. One could also potentially ask for recommendations within either the microformats IRC/chat channel or the IndieWeb chat. If you create a new and experimental one, take a few moments to document your use case in the IndieWeb and/or Microformats wikis for others who come after you. Keep in mind that if you change the property name at a later date you will need to go into your database and change the wp_postmeta database meta_key field from mf2_property1 to mft_property2 so that WordPress will know where the appropriate data is stored to be able to display it.
The show setting is fairly straightforward, but may not be as obvious to some. It has either a value of true or false. If the value is false, the new post kind won’t be displayed in the radio button options within the admin UI for creating new posts. If the value is true, then it will be available. The Post Kinds plugin has a number of reserved post kinds which aren’t displayed by default on most sites–primarily because they do not have appropriate views or data fields defined–but they could be enabled by changing the show flag from false to true. Most often we recommend you only show those kinds that you’re actively using.
Additional examples of the dozen or more standard post kinds can be found within the code to provide some additional potential clarity on what types of data each of them are expecting.
I debated a while on making the verb ‘chickened out’ instead of ‘chickened,’ but I chickened out thinking that it would make my posts something wholly different. Obviously you can now make your own choice.
With this chunk of code saved into the plugin, it is now generally aware of the new post kind and can save the appropriate data for this new kind of post.
Now you’ll want to add some code to the plugin to tell the plugin how it should display the data it’s saving for your posts. The easiest way to do this is to copy and paste the code from one of the many default views already in the plugin and just change a few small pieces of data to match your post kind. This code can be created as a new file with your new matching post kind name (the one at the top of your code snippet above that appears on line 1 before the word ‘array’) in one of two places. If you put it in the views folder in the plugin, you may need to re-add it later on if the plugin updates. Otherwise you can add the code into a file which can be placed into a folder named kind_views in either the folder for your theme (or your child theme, if you have one.) We recommend placing it in your child theme, so if the parent theme updates, your code won’t accidentally be lost.
There are a variety of views for many post kinds available to stand as examples, so you can look at any of these and tweak them as you wish to get the output you desire. For more complicated output displays it might certainly help to have some PHP coding skills. For my chicken post kind I simply copied and pasted the code for the bookmark kind view and pasted it into a file named kind-chicken.php following the naming convention of the other files.
Below is a copy of the code I added for the chicken post kind which is nearly identical to the bookmark view with exception of changing the name of the template, adding u-chicken-of and changing the get_before_kind to chicken instead of bookmark. Note that because the chicken-of microformat is wrapped on a URL, it has the u- prefix, otherwise if it were on plain text it would have been p-chicken-of using the standard microformat h-, u-, p-, and e- syntax.
I also put both the u-chicken-of and the u-bookmark-of microformats in the view so that sites using the post type discovery algorithm that don’t recognize the chicken-of microformat won’t choke on the proverbial chicken bone, but will default back to thinking this post is of the bookmark type. I suspect that I could also have left the u-bookmark-of off and many would have defaulted to thinking this post was a simple note as well. You can make your own choice as to which you prefer as a default.
Finally, you’ll want to include the appropriate svg icon within the plugin so that it will display on the post (if the appropriate settings are chosen within the plugin’s settings interface: either “icon” or “icon and text”), and within the Kinds metabox in the post editor.
You’ll want to have one icon named kindname.svg in the svgs folder and another named kinds.svg in the plugin’s root folder. The kinds.svg is a special ‘master’ svg of all of the kinds icons bundled together. If it helps in matching the icon set, all of the current kind icons are made with Font Awesome icons which have the appropriate licensing for distribution.
In my chicken example, I opted for the feather icon since Font Awesome didn’t have an actual chicken available.
Naturally some people may want to display particular exotic kinds which might not extend to the broader public. A chicken post type certainly falls under this umbrella as I wouldn’t expect that other than for novelty, obsessive IndieWeb post kinds completeness, or for a very small handful of specialized farming, juggling, or comedy websites that anyone else in their right mind would really want to be doing a lot of posting about chickens on their site.
David Shanske, the plugin’s creator, has made it possible to create a sub-plugin of sorts so that one can add one-off support to these types using a variety of filters and functions. This could be useful so that updates to the plugin don’t overwrite one’s work and require adding the pieces outlined above back in again. Sadly, this is a tad beyond my present abilities, so I won’t address it further at the moment other than to say that it’s possible and perhaps someone might document it for others to use a similar template in the future.
Try it yourself
Now that you’ve got the basics, it should be relatively easy to add many of your own new post kinds.
If you want a simple exercise, you should be able to go into the code and manually change the show flags for the eat and drink kinds from their default false to true to enable posting food to create a food diary on your website. (These have a reasonable default view and icons already built in.)
With slightly more work you can change the show flag on the follow kind and copy a view based on the bookmark view to make a follow view to make follow posts. (Here’s a link to my version.) Similarly other hidden kinds like wishes and acquisitions can be enabled easily as well. These also have default icons already built in, but just need a view defined to show their data.
If you want a slightly larger challenge that uses all of the above, why not attempt adding the appropriate machinery to create a want post?
Though David has often said before that he wouldn’t build in support for multi-kinds, some people may still want them or think they need them. If you’re exceptionally clever, you might be able to create your own explicit multi-kind by mixing up the details above and creating a kind that mixes a variety of the details and creates a view that would allow the specific multi-kind you desire. Caveat emptor on this approach if you should take it.
Share your ideas
Now that you’ve got the general method, what kinds are you going to deploy in the future? What have you already created? Feel free to reply with your ideas and thoughts below in the comment section or send us a webmention from your own site with what you’ve done. Maybe consider doing a pull request on the plugin itself to add the functionality for others?
I’ve been meaning to write regular updates to highlight some of the useful changes in the functionality of the IndieWeb suite of WordPress plugins, but never gotten around to it. There’s been a few really interesting ones lately, so I thought I’d start. Observant watchers who read through either the code or even the scant change logs before they update their code may catch some of these features, but sometimes interesting tidbits can slip by the most vigilant. Here are some interesting recent ones:
Display of Reads, Listens, and Watches in comments sections
David Shanske’s excellent Post Kinds Plugin allows one to post what they’re reading, listening to, or watching in simple IndieWeb fashion. (Examples of these on my site: read posts, listen posts, watch posts.) These posts types automatically include the appropriate microformats classes so the user doesn’t need to bother doing them manually. For a long time when replying to another’s site, bookmarking it, or even mentioning it when also using the Webmentions plugin would send the site a Webmention that would generally cause it to show up as a native comment, bookmark or mention. With an update late last year, from within the Discussion settings in WordPress, one could set toggles so that many of these webmentions could be displayed as facepiles. Other broadly unsupported post types would typically default to a simple mention.
Recently David Shanske and I started a podcast, and he thought it would be useful if his site could accept listen posts and show them visually within his comments section just like these replies, bookmarks, and mentions. Thus over the past month he’s added code to the Semantic Linkbacks Plugin to add the functionality for these types of posts to properly render showing facepiles for listens, reads, and watches.
This is what webmentions of listen posts look like on his site in his comments section:
Listen (or scrobble) posts can send webmentions (or notifications) to the original content potentially with the experimental listen-ofmicroformat. In the case of scrobbles of podcasts, these webmentions could be displayed as “Listens” which would provide the canonical copy of the podcast some indicator of its popularity and actual audience. It is tremendously difficult to obtain data on the actual number of listens within most of the podcast community and typically a fraction of the number of downloads must be used as an indicator of the actual reach. Being able to display listens could potentially be a boon to the podcasting market, particularly with respect to advertising as this type of open social web functionality spreads.
I haven’t yet seen one for watches in the wild yet, but maybe you’ll be either the first to send or receive one?
The microformats on these posts is generally considered to be experimental, but with the ~500+ users of this suite of tools as well as others who are already using them on other sites, they’ve now taken a dramatic step into the open internet and more widespread use and potential official adoption.
Editable Webmention Types and Avatars
Just yesterday, I spent a few minutes in the IndieWeb chat helping someone to laboriously delve into their mySQL databaset and find a particular snippet of data so they could manually change a received webmention from being a simple mention to being a reply so that it would display as a native comment on their website. I’ve often done this to take what sometimes seem like simple mentions and change them to replies to reveal the richer content they often contain for the broader conversation. Sadly the process is boring, laborious, and fraught with potential ways to mess things up.
As of this weekend, this process is no longer necessary. One can now go to the admin interface for their comments and webmentions (found at the path /wp-admin/edit-comments.php), click on edit for the particular comment they’re changing and then scroll down to reveal a droplist interface to be able to manually change the webmention type.
As another example of a use for this functionality, perhaps you’ve received a listen mention on one of your podcast episodes that has a lot of useful notes or commentary germane to your episode? Instead of hiding it as a simple listen, why not change the type to reply to allow a richer conversation around your content? After all, with a reasonable reply it will be implicit that the commenter actually listened to the episode, right?
Because there is currently no functionality in WordPress for saving or caching the avatars of commenters via webmention, when users change their profile images on siloed services like Facebook, Twitter, et al. the link to their old avatars quits working and they were displaying blank spaces. This is an unfortunate form of linkrot, but one that can become more visually apparent over time.
As one can see in the image for the commenting edit box above, the field for the Avatar is now editable. This means one can update out-of-date or blank avatars. One now also has the ability to moderate/edit or easily remove/switch avatars if users are sending inappropriate photos for one’s site’s audience.
In addition to being dead simple to use to track my reading, I love that Reading.am is able to add things I’m currently listening to and watching. Even better, some sites like Huffduffer.com dovetail with it incredibly well and provide in-line audio files without needing to click through to the original. What a lovely win for UI!