Having recently posted the ingredients card for ocTEL I thought I flesh out some of the details and give ‘mama’s secret recipe’. Like most recipes it’s not perfect and I encourage you to try it yourself and refine where necessary. Also it’s worth remembering that even though the course is in progress the recipe is being continually refined so it might be worth tracking the code and developments announced here.
Look and feel (child theme)
Starting with the basics, ocTEL gets it’s appearance from the Responsive Theme. The advantage of this is it automatically gives us a mobile and desktop friendly interface. Because we were planning a number of customisations we created a child theme (more info. on child themes). Child themeing works well but one issue is as we have customised some of the templates we are now locked into an older version of the parent theme, version 18.104.22.168 (the parent theme is now version 1.9.3).
As previously mentioned we’ve developed a bespoke Course Reader into our child theme. This incorporates the functionality of a couple of other plugins (Jetpack for infinite scroll, WP Favourite Posts). The main new template files are archive.php and content.php. To give the Course Reader it’s own configurable sidebar widget additionally there is sidebar-archive.php which is registered in the child theme custom functions.
Within ocTEL my life is made a little harder because registration is entirely separate to the WordPress site. Ideally I’d just use the Theme My Login and enable the ‘Enable User Moderation’ and ‘Enable Custom E-mail’ modules then moderate new users using admin approval. In Settings > General you would also need to set Membership to ‘Anyone can register’ and ‘New User Default Role’ as Subscriber). In the Theme My Login custom email options I’d direct new users to complete their profile (within ocTEL we use bbPress (a forum plugin) which gives us a nice profile page – I’ll detail how we customise this later).
In ocTEL we still use Theme My Login mainly for a front-end login screen and instead to create the accounts we use the Add Multiple Users (AMU) plugin. When creating usernames the rule of thumb we used was to use the person’s twitter username or combination of firstNameLastName. The reason for using the twitter handle is FeedWordPress (the aggregation plugin we use) tries to match authors to existing user accounts “with the same name as either (1) their login, (2) their display name, (3) their e-mail address (if given), or (4) one of the “aliases” listed in the user’s profile” [Ref].
By using a Twitter handle gives FeedWordPress another dimension to match authors using the theory that your twitter handle may be your ‘nom de plume’ for 3rd party services, hence trying to avoid the situation of users being ‘analytically cloaked’ (Suthers & Rosen, 2011). Logins and passwords generated by AMU were exported back to ALT to allow them to distribute via their mail merge system.
Some additional complication is in the original offsite registration form was that users were asked if they a) wanted to be publically listed, b) receive course related emails. To display course participants we use Author Avatar List which allows you to list users based on role. So by using User Role Editor we duplicated the ‘Subscriber’ role as ‘Subscriber Unlisted’. As AMU lets you define the role for each new user the import data was reshaped in Excel to include this.
As part of the course related emails we were keen where possible to automatically subscribe users to the ‘daily newsletter’. The newsletter is distributed using the MailPress plugin which does have a built-in add-on to synchronise its mailing list with the site users. The problem is there is no easy way to batch subscribe a subset of users who opted for email correspondence, instead you have to dig into the guts of the SQL database (to get easy access to this we use Adminer) and do an import from there. If the course was configured so that the default was you got the daily newsletter but you could opt out on an individual basis this would have been a lot easier as there is a tickbox in the MailPress Settings for newsletter Subscriptions for default on.
Like many other similar courses we are using the FeedWordPress plugin to pull data from external feeds. Most of the setting are left as default. Where we perhaps do something different is in the Categories & Tags settings we’ve switched of ‘Match feed categories’ for Categories and then assign the default custom Categories Reader and child category Blog posts.
There are a couple of reasons for doing this. In the Course Reader is programmed to render any posts with the ’Reader’ parent category and when users self-register blogs we wanted them to automatically be assigned these categories. When we register other data feeds like Delicious bookmarks we override the site settings and ‘file’ the feed into a different child category of Reader.
There are a couple of extra FeedWordPress plugins we use to try and keep our feeds clean. After reading Anne-Marie Scott for #edcmooc we’ve installed FeedWordPress Duplicate Post Filter mainly to try and cope with duplicate bookmarks, but as you’ll see from the previous links it doesn't always work.
We also use Ada FeedWordPress Keyword Filters which means we avoid the issues of finding participant feeds for particular tags or categories. Instead we instruct participants to include the course tag in their post content or title and then filter using OR ocTEL,octel,OCTEL (the filter is case-sensitive hence the variations)
A fortunate decision we made was to include a discussion space within the ocTEL site. For this we used the bbPress forum plugin. The benefit or using this was that we automatically had a template for participant profile pages, instead of the less user friendly default WordPress page (shown right). Originally we hoped to use the Theme My Login Redirection module to redirect users to their profile page on login but it didn’t seem 100% reliable. Instead we added a custom filter to redirect to the profile page. We didn’t completely remove the backend admin for subscribers. Instead we opted to hide some of the extra clutter.
One of the early user requests we got was the ability to update whether they were listed on the public participant list. As there was already a hook to handle the profile updates it was possible to allow users to switch roles.
As well as being able to view any profile (view profile template), users can also edit their details (edit profile template). For the profiles we remove some unwanted fields and add some of our own, which we hook into WordPress.
Registering a blog feed
Because we wanted users to be able to manage their newsletter subscription from their profiles and because MailPress handles this separately from user profile data we created a custom link populated by querying the MailPress database.
Individual Course Reader Submissions
Other open courses have employed a number of techniques for capturing thoughts, ideas, activity from off the rss beaten track (the ds106 assignment bank immediate springs to mind). Early on in ocTEL we got a request to add someone’s Storyify to the Course Reader. As this had no RSS feed in the user’s profile page we created an individual item submission form. The form uses the User Submitted Posts plugin. In the end it might have been quicker to code this from scratch because the plugin has a number of settings that have to be configured and custom hooks applied.
If this is something you want to use in your own course activate the plugin and in the settings show:
- Post URL
- Post Title
- Post Content
- Use registered username for author
- Use a hidden field for submitted category
In the category ID you need to find the ID of your chosen categories (you could use the Uncategorised’ ID because as part of our custom processing hook we modify/add it)
Some custom processing is required so that posts submitted via this form behave in the same way as content collected by FeedWordPress. This requires adding the meta data used in the Course Reader and modify the behaviour so that the post redirects the user to the source url. For the first part we add an additional category (this is where you could add/remove more) and post meta then change how the permalink works for this post type.
As mentioned earlier we use the bbPress forum plugin in the course. Originally this was included to allow an alternative discussion space for people who were not big users of other social media channels. Beyond some new templates for profile pages the only other code customisation is the integration of a users WP Favorite Posts. Several bbPress specific add-ons are used to improve functionality listed in the ocTEL recipe card, denoted by bbPress or bbP (one additional plugin recently added is bbPress Pencil Unread). These plugins are mainly used to enable extra functionality for administration, navigation and notification. Within the forum settings (Settings > Forum) with these plugins enabled gives you some extra control. For the next iteration of this one change we’d probably make is flip the threaded reply order to newest first.
MailPress custom theme
A big aspect of our course configuration is the daily newsletter summary of course activity. This is handled by the MailPress plugin. MailPress includes a number of additional add-ons which you can selectively enable (Plugins > MailPress Add-ons). The ones we have on are:
- Batch_send Mails : Send them in batch mode
- Bulk_import Users : import from mp users list
- Connection_sendmail Connection : use Sendmail
- Import Users : Import/Export mp users from/into files
- Newsletter Newsletters : for posts
- Sync_wordpress_user Users : synchronise with WordPress users
- Tracking_ga Tracking : mails activity to your site with google analytics
- View_logs Logs (view logs stored in tmp folder generated by MailPress in your browser)
MailPress allows you to theme your mailings in a similar way to WordPress themes. Our theme
- Course information – displays any full post made by the course team tagged ‘course information’.
- Recent activity – is used to summaries new aggregated content from the course reader
- Forum activity – currently configured to display the last 5 recent topics and recent replies
- Participant blogs – excerpts from participant blogs
- Bookmarks – a summary of bookmarks from delicious and diigo tagged ocTEL
So that's a snapshot of work so far, stay tuned for more developments. If any aspect of this recipe is unclear or you have suggestions for improvements leave a comment ;)