Archiving Slack Channels

Since we’re making channels in Slack via our project creation, it made sense to archive them when the project was completed. In projects (this particular post type) we have a custom field for the start date of the project and one for the end date of the project. Step one is to check on updates whether the post has the end-date field filled out. In my case, this is one of the legacy ACF fields that survived my great metadata purge. So checking it is done like so . . . The Slack archive API piece looks like this. And finally we run this function when projects are updated like so. We’re still experimenting with this workflow and archiving is a decent start. You can easily reactivate it and results still turn up in searches. It’s likely we’ll also rename it from p-whatever to z-whatever to get it out of the way.

WP API Posts Plugin

This is a little plugin I wrote while working with Jon Becker to build out the Ed Leadership Hub site. Essentially, we wanted students to be able to fill out a quick form and build out a profile page. As is my my wont, I went the Gravity Forms route. They could give a short bio, twitter account, and their portfolio URL. We’ll be tying in the the posts via Feed WordPress but it seemed like more hassle than it was worth to map the author id to this page. Pretty fun to be able to build out a solution on-the-fly and since all students were going to be in rampages I didn’t have to worry about WP not being upgraded or running from a non-HTTPS server. This chunk of the plugin builds out the HTML from the shortcode. You can see the data-url, data-num elements being populated. There’s a few other things in there I haven’t yet activated. Using data elements is the easiest way I’ve seen to pass variables to the javascript . . . the javascript looks for the altlab-getsposts id and then pulls the data elements from it. Once again, there’s some extra stuff in there for down the road that I haven’t implemented here.

Event Calendar & Participation

One pretty common need I’m starting to see around community-engaged learning is a way for students/faculty to submit events to a central calendar and then indicate their participation in various events. That comes with various program requirements. People want specific reflection patterns per event and have different ideas around what an event counts for in their program. That comes with additional metadata requirements, dashboard views etc. We did something like this with cultural events when we made the RVArts.org site.1 I’ve got at least three programs interested in this process and some are pursuing products like Give Pulse. So I took advantage of the request from the da Vinci Center to look at how quickly we could make a functional prototype that would – create a calendar of upcoming approved events for students allow students to submit reflections on those events with a particular structure allow students to submit additional events for approval generate data visualization and reporting for student reflection and for program analysis purposes I took the more difficult route and assumed we’d have no user accounts just to see what that felt like. With user accounts this become easier. Even with this restriction I was able to build out a functional custom theme in around three hours. Next time, it’d be considerably faster. We could easily bring […]

04

Outboard Memory – Query Thumbnails & Crop Images CSS Trick

Two little tricks that came up this week . . . Random Posts Must Have Featured Image Set Sometimes you want to query a random set of posts but only return those with featured images . . . you can using ‘meta_key’ => ‘_thumbnail_id’ like so . . . Handy. At least for me. object-fit: cover; Now that I’ve got featured images, I usually have a variety of aspect ratios making uniform layouts a pain. Often I’d have set those images as background images to deal with different aspect ratios and do a cover. Something like this. I was never a big fan of this method as I don’t like creating inline css and that’s the only way I could think to do it with dynamically created content in php or javascript. If just felt awkward. Enter object-fit and if you already knew of it I don’t know why you didn’t tell me. You can see the difference it makes in the two examples embedded below. Not earth shattering but really handy for stuff I do all the time. See the Pen GvNdjv by Tom (@twwoodward) on CodePen.

28

What is Rampages? Part Two

Image from page 776 of “The Ladies’ home journal” (1889) flickr photo by Internet Archive Book Images shared with no copyright restriction (Flickr Commons) Continuing on from Part One . . . I have way too many examples. If you read this blog often, you’ve probably seen most of these being born1 but this is my first attempt at organizing and a more cohesive structure around key categories/processes and all in one place. This isn’t my normal pattern as I’m more of a folksonomic structure guy rather than taxonomic. What this has done is remind me of just how much work has been done in a relatively short time. I’ve only been here three years. Rampages is roughly three years old but wasn’t publicized initially and then had some rough growing pains. The last year or so I’ve been trying to convince people my department still exists . . . and still people find ways to do tons of amazing work. I’m not even including the stuff we do outside of WordPress. I’m only scratching the surface but this post keeps getting longer and longer. I threw a bunch of the links here. Some will be duplicates but there’s plenty of additional sites as well. Courses Rampages supports faculty teaching the full continuum of courses at VCU- from augmenting traditional […]

What is Rampages.us? Part One

I’m going to be attempting to explain what rampages.us is to a group on Tuesday. I’ve been struggling with a more digestible version of this for some time. While true, saying “Whatever you want it to be,” isn’t what people want to hear. Giving people something more concrete to think through what the site can do makes sense. These categories, however blurry and overlapping, provide some entries to additional thoughts and will likely help me organize my brain around this a bit better. Outside eyes are helpful so if you see stuff I’m missing or explaining poorly please throw me a comment here or on Twitter. While some of the details are specific to our version, I think the general arguments might be of use to others. If you end up doing that (or have already done it), throw me a link as I’d love to see how other people do this. Technically Speaking Rampages.us is a large WordPress multisite installation started roughly three years ago. Our community currently has over 24,000 sites and 22,000 members. WordPress is an open source platform which runs a huge portion (~30%) of today’s Internet and is the most popular CMS in the world. That matters for a variety of reasons. WordPress is free. This dramatically lowers barriers to access for our students while […]

25

Rampages Numbers

In responding to some data requests, I delved into the WP tables to pull some rampages data. All users ever . . . I need to set up something more automated but for this I dumped the MySQL tables as CSVs and then just imported them to Google Sheets. With very minimal functions, I got this data. My favorite function combos are to pull the unique values from a range =unique and then do a =countif off those values. It’s a really quick way to get graphs like these.

13

Browse by Color in WordPress

Here’s a quick video of a browse-by-color example I made in about ten minutes this AM prior to a meeting with a faculty member in our fashion program. This one is using FacetWP1 which is acting on a custom field I creatively named ‘color.’ It seems like it’ll be useful to some disciplines and we have the option to do lots of automated patterns using Color Thief to grab pallets. The video is also one way we might start sharing examples of what we can do in various platforms. There’s significant need to show that internally and for external faculty so people get a better idea of their scope of options. 1 You could easily do this by hand now with the WP JSON data but it’d take a bit longer.

I’m not dead yet . . . Google Scripts to Check on a Bunch of WP Sites

John Stewart is going to write up something more systematic and structured as he’s taken these rough ideas up a notch but I figured I’d throw this functional Google Script code in here before I lost it. I believe I got up to five positive statements on blogging more in-process stuff so I’m taking that as an overwhelming mandate. These Google Script functions are meant to loop through a set of URLs in a Google Sheet pulled as an array to see if the site’s still in use. The first two take a look at the WP REST API endpoints for posts and pages. That way if the person only writes pages you won’t be tricked. I’d probably write them all to the sheet because I’m paranoid. The third (aka the hassle as I hadn’t ever messed with XML using javascript) looks at the RSS/XML feed in case the site is not updated enough to have a functional API endpoint or if it’s broken for some reason. This won’t help you out if they’re just writing pages but there’s only so much a person can do. John made a more robust structure with error checking, the piece where it writes to the spreadsheet etc. and I’ll loop in his post once it’s up.

Auto-Creating Slack Channels from WordPress

Image from page 279 of “The Ladies’ home journal” (1889) flickr photo by Internet Archive Book Images shared with no copyright restriction (Flickr Commons) In working through the project page a bit more, it seemed like it’d be more pleasant to start in WordPress and have our events echo outward in other services. One of those events is the creation of project specific Slack channels. In the past, I’d mainly listened for events . . . programmatically checking back every so often to see if something had occurred so I could do something else. In this case it made more sense to have one action directly precipitate another. These are the three functions that fire when we publish the custom-post-type Project.1 In any case, it’s a pretty instantaneous creation and invitation to the channels. 1 I don’t know how to punctuate that but it’s probably not hyphens.