That’s about half the descriptors in the title for a writeup on my latest WordPress/Syndication Hub site that Does Not Act Like a Blog- the Covering the Coverage site, one of the 24 courses that are part of Gardner Campbell et al’s Great VCU Race Bike Book project.

I’m pretty stoked for how it is running for what is not much more than a week’s worth of building.

Before diving into the details, it’s worth noting how this is a fantastic example of turning what might have been a university’s “disruption” (not the Christensen variety, more like logistic kind that affects it’s operation). The city of Richmond, Virginia is host of the 2015 UCI Road Race Championships kind of like the grand prix of bicycle races:

The Road World Championships (Worlds) is cycling’s pinnacle event, held annually in an international city as chosen by the Union Cycliste Internationale (UCI) through a competitive bidding process similar to the Olympic Games.

Worlds is a nine-day event, featuring 12 Championship races for Elite Men and Women, Under 23 Men and Junior Men and Women. It is a rare opportunity for the athletes to compete for their country, just as they do during the Olympic Games. Athletes compete in three different disciplines including the traditional Road Race, the Individual Time Trial and the recently introduced Team Time Trial. World Champions are crowned in each discipline.

Worlds is truly one of the great global sporting events. It is covered by more than 500 media outlets from around the world and is broadcast live to a global audience of more than 300 million people.

Being located in downtown Richmond, and pretty much in the middle of an event that closes major streets and brings 400,000+ visitors to town, VCU had plans to shut down the university for this week.

That’s where Gardner and others stepped in and and said (not quoting but this is more or less how I’ve heard it told) “Let’s make a learning/community opportunity of this for students.” His office offered funds for faculty to develop special one credit courses offered this week, all related somehow to bicycling- the event, science, team work dynamics, social issues. Students in dorms were allowed to stay here.

My little bit of help in Spring of 2015 was designing a course outline site, where each one was represented by a cycling jersey (yep, putting that Treble HTML theme to work again)

291-courses

(That’s the lovely art of VCU’s Emma Gauthier on the shirts).

One of the courses Gardner had in his mind is what before he has called with his students a “meta team” a project where a group does a project of what other groups are doing, which is where the site I am going to describe comes in. For details on the syndication concepts, see Feed WordPress 101.

First of all, all of the courses have web sites running on VCU hosted Rampages; some are syndicating in content from student blogs, others may have students as authors on the course blog. A variety of approaches, not a monolithic one. This makes content easily syndicatable via good ole Feed WordPress, may old bag of (hopefully) still worthy tricks.

This the idea of Covering the Coverage is not to display everything aggregated, but be a selected process to pick a variety of content each day from across the courses, like a daily magazine (we had initial dreams of twice a day coverage, but saw as we worked on it that the content would roll off the site too fast).

Warning- getting close to the point where I start going into gory WordPress technical detail, feel free to skim, or better yet, go flip through the site.

The notion of bringing in all the raw content as unpublished drafts in Feed WordPress has some inspiration to Mike Caulfield’s Water106 idea. The way I built is is a means of subverting the typical WordPress reverse chronological structure, which means tinkering with themes, which means fun for Alan.

Yeah, that kind of fun (great photo, Gardo!).

The parent theme for the site is Carton Pro a “news magazine” type theme that uses a flexible masonry approach to publish stories to the front and archive pages.

Much here is driven by a category structure; I have a parent category called “issues”, and each daily publication is a category

I wanted us to have options for controlling the order of which the posts in the category appear, other than tinkering with the publication dates; I found there is a simple functions.php addition I could use that adds the menu order option you get with WordPress Pages to ordinary posts:

// ----- We want menu_order fields added to regular posts as a display order control
add_action( 'admin_init', 'posts_order_coveringcoverage' );

function posts_order_coveringcoverage() 
{
    add_post_type_support( 'post', 'page-attributes' );
}

And now posts have a field we can enter a digit for relative order of appearance (items with the same order follow in normal reverse chronological order)- the Order field

status

I have a one setting special options admin screen (built with code I gleaned from Alisa The Geek’s tutorial on the Settings API) that lets us “flip” which issue (category) is shown on the front of the site.

To make an issue "live" we select its category from a special options page

To make an issue “live” we select its category from a special options page

This means the front template needs some monkeying. Well, actually it’s done more properly via the pre_get_posts action, which, if I understand correctly, is the “right” way to do this since it saves a database call.

add_action( 'pre_get_posts', 'coveringcoverage_query_mods' );

function coveringcoverage_query_mods( $query ) {
    
    if  ( $query->is_home() ) {
        // show posts for the current specified issue
        // which is set from the theme special options
        $query->set( 'cat', coveringcoverage_option('curr_issue') );
        
    	// show 'em all
        $query->set( 'posts_per_page', '-1' );
        
        // give us order
        $query->set( 'orderby', 'menu_order' );
        
        // give us ascending
        $query->set( 'order', 'ASC' );
        return;
    }    
}

What I am doing is modifying the main WordPress query for the home page to (1) restrict to the category set by my special options; (2) show all the posts (as it turns out JetPack infinite scroll has issues with pages where the query is modified); (3) Order the ascending by the menu_order field I added above.

I was unable to get this to work for my category archive pages, so in the interest of Getting It Done, I made a mod to archive.php to check if the current category has an ancestor of my Issues category (sadly hard coded as ID=3), and then to mod the query the same via query_posts

// special query if current category is a child of our main issues category (id=3)
// yes hard coded, for future use should be made an option

$in_issues = 0;

if ( cat_is_ancestor_of( 3, $cat ) ) {
	 // mod query for an issues subcategory, we want all posts and use the menu order values to sort
	$args = 
		array (
			'posts_per_page'    => -1,
			'cat'            	=> $cat, 
			'orderby'			=> 'menu_order',
			'order'				=> 'ASC',
		);
	
	// give us this query, our daily bread
	query_posts( $args );

	// a flag to let us know elsewhere we have monkeyed with the query.
	$in_issues = 1;
}

I have it set up so only content from the “published” (in the sense we have released it) categories show on the front page, meaning we can work on future issues, but they are never linked on the front til we make some adjustments (two widgets on the side let me filter displayed categories specifically by ID.

On the syndication side, content from the 23 course blogs are brought in again as drafts. Using Feed WordPress settings, I assign a Category of “Sources for Courses” to all these feeds, as well as one category per course as a subcategory. This way we can filter by all syndicated course content, or just from one course.

The editing process we have set up has a few moving parts as well; we have about 5 people including students reviewing content and suggesting them for inclusion in Slack. I set up a script to export the course feeds as OPML so people can review them in a reader like Feedly.

Yep, RSS Readers still have value.

Yep, RSS Readers still have value.

We ask people to slack the URLs for recommended stories, and pin them to the channel. Then, the editors (for the first days me, tonight’s may be assembled by Gardner and then hopefully Donnie one of our students) have to find the stories in the WordPress Posts (the course category filters help):

sources for courses

Then it’s a matter of checking a category for the issue to send it to, giving it a value for order, and setting the status to publish.

The theme we use displays the lead item (menu_order=0) in a bigger box, so we make that our “lead” story. The way I have been processing stories with menu order is:

  • Order = 0 for the lead story- the first one appears in box double the width of the others
  • Order = 1 for a featured editorial or top story
  • Order = 5 is a good start for general stories. If you want to elevate a story, move it to a lower number, if you want to assure it appears at the end, maybe push it to 8 or 9.
  • Order = 10 for a closing story or the banner image credits

Yeah, I tried to get fancy and added the banner image to the top, that’s not part of the theme, but a widget area I added that uses the Master Slider plugin that lets us but up images from student posts.

We create a new slider for each issue, and use the Widget Visibility plugin to control which places it appears on (always on the category page, and the current slider appears on the home page).

There is another category structure for “Departments” which are the stories we are writing/including, like:

An additional side benefit has been getting to work with VCU’s new associate Dean, and my good friend and bike nut, Shelli Fowler:

We had fun Monday interviewing our yellow shirt wearing students:

There are likely another 20 little tweaks and peeks done to make this work. You can get a sense of the issue production process from a guide I wrote yesterday as a Gdoc.

For now, we are just off to the races.


If this kind of stuff has value, please support me by tossing a one time PayPal kibble or monthly on Patreon
Become a patron at Patreon!
Profile Picture for CogDog The Blog
An early 90s builder of web stuff and blogging Alan Levine barks at CogDogBlog.com on web storytelling (#ds106 #4life), photography, bending WordPress, and serendipity in the infinite internet river. He thinks it's weird to write about himself in the third person. And he is 100% into the Fediverse (or tells himself so) Tooting as @cogdog@cosocial.ca

Comments

  1. I love your sharing Alan. Somewhere between inspiration and intimidation. I think that hacking the code is my next venture. Stupid question, I am assuming that you could not do all of this on a WordPress.com account?

Leave a Reply

Your email address will not be published. Required fields are marked *