Advanced filtering in Ghost's post dashboard
Advanced filtering in Ghost's post dashboard

As I painstakingly port content from two blogs and multiple outlets to its new home here, I'm finding that Ghost's editor has some growing to do.

The first pain-point I had was re-organizing content formerly distinguished by categories. I managed to work out a system using what Ghost calls "Internal Tags":

Tags which are prefixed by a # character, otherwise known as hashtags, are internal tags within Ghost - which is to say that they aren't rendered publicly. This can be particularly useful when you want to drive particular functionality based on a tag, but you don't necessarily want to output the tag for readers to see.

Having set up a few internal tags to route content to different feeds, I started going through each post one by one to adjust the content and retag each for their new classification. The trouble here was that scrolling through a large list for each post that needed to be adjusted was making a tough job harder.

Then I found that I could save a filter to the sidebar. In this case, I set up one for each internal tag for easy access to blog posts, podcast episodes, and archived posts. This was great for items I had already re-tagged, but what I wanted was a similar list of items that I had not yet touched. Playing around with the parameters in a filtered view's URL scheme, I managed to get the job done.

https://domain.net/ghost/#/posts?order=published_at%20asc&tag=-[archived,blog,freelance,jtdigest]
The filter I set up for un-categorized posts.

Here I created a comma-separated list of the tag slugs I wanted to be ignored, tossed them in some square brackets, and pre-pended a minus sign (aka inverse) as I would in a filter within my routes.yaml file.

This gives me a fast and elegant way to verify that all posts in my CMS are properly tagged with one of my 4 "categories." This little trick has saved me hours in scrolling and searching as I work to consolidate my collected work online.