Journal

Facing WordPress Demons

A blog-building experience from someone eternally confused by web design.

Creating this site was not easy, and neither is maintaining it. Of course, it was never the behind-the-scenes stuff that I was keen on, but the random pontifications on the meaning of life, the universe and everything.

Regardless of my initial plans, setting up and sustaining the infrastructure has taken up a considerable amount of time and energy. Let me take you through that process, interspersing it with some tips for those contemplating a similar route. Some may read this and laugh, thinking that these are very easy challenges to understand and answer. I would caution – not for many of us unacquainted with the syntax of the web, facing a global database that is progressively more nebulous. With only ourselves as interpreters to rely on.

Note: Though I share some plugins I found helpful below, do not construe this as endorsement. What works for one person may not work for another. Each site construction will be its own puzzle.

– / – / –

Saturday, the first day of a week off from work, and the first day of the winter holiday break. I have already reverted to my natural, nocturnal state, still awake at 4am and wondering what to do next. The rest period has barely begun and I am convinced I need to pick up an activity to occupy myself lest boredom arrives.

After all, I do not celebrate any holidays. It is freezing outside and I will not be venturing too far. The fridge is stocked and the apartment is comfortable – I have everything I need right here. Local acquaintances have travelled to be with family; they will not come calling. This is a welcome sabbatical from regular existence.

So I decide, on a whim, to cross an item off the long-growing to-do list. The stand up special I am watching winds down and I begin doing some initial research. It takes a couple of hours, but I identify the platform, hosting service, and various add-on tools that will be required to create a website. No lofty ambitions here. I want to see if I can upkeep a blog, gauging my ability to write regularly while maintaining some kernel of relevance, with the eventual aim of developing a more practiced habit. One that may lead beyond cursory glances at the everyday to more careful peering into the worlds beneath words.

This is a personal endeavor and one I know will prove challenging. It has been nearly a decade since I took a couple of courses in web development. Basic HTML5, CSS and JavaScript knowledge will not be enough. Modern web infrastructure can get sophisticated. At least it feels that way, because I am not a coder. We are living in a world of dynamic web pages output by content management systems, softwares, applications and their widgets – Russian dolls all the way through. The communication between each layer an exercise in increasing obfuscation.

Interpreting and implementing the technical has always been my Achilles heel. So says my background in Physics; science was also a language I could never fully speak. The conceptual aspects were graspable though the mathematics proved elusive. Technical proficiency requires repetition, possession of a vast repository of central definitions, and a honed ability to test different structures for the same solution as you commit the writing to the page. My proclivity is towards novel pursuits. Critical inquiry focused on problem defining and selecting more than problem solving. And this is where I am, dreaming of casting off without a boat or sail constructed.

But challenges are inviting, and to learn is to forge ahead without fear of failure.

 

Tip 1: Go for it.

 

I buy a domain and purchase some shared server space. I choose WordPress as the foundational platform, despite every forum indicating it to be one of the more complex setups. Not only initially, as one builds the basic components of one’s site, but also on an ongoing basis. I choose it because it provides innumerable applications, a big advantage over other platforms. Though this inevitably implies an abundance of opportunities to mess up.

The automated setup through the hosting provider concludes and the site goes live. The default theme is active and there is no content visible – just a blank home page and a test post. I groan as I think about the work ahead, but I sink into the sunk cost fallacy. There is a little light filtering through the blinds in the living room; how appropriate.

 

Tip 2: You may want to:

      1. Hide your site as you are building it,
      2. Ensure backups are saved, and
      3. Have a space to test every function available so you gain familiarity with the architecture.

Each hosting provider, particularly if you are using a ‘Managed WordPress Hosting’ service, will have the option to create a ‘staging site’ (i.e. a test site only accessible to the administrator) where you can copy your data and build or break things as you please. The hosting provider will also likely offer site backup services, either directly on your site admin page (or ‘web panel’) or through a plugin found via your WordPress dashboard. Upon initial setup you should be walked through step-by-step instructions on using these functionalities. If you are not, just search “How to [set up a staging site/ create a backup of my site] via [host name]”.

To hide your main site as you build it, a plugin such as ‘Password Protect WordPress’ will do the trick, locking your domain until you are ready to share the content widely.

 

I spend the next couple of days testing various themes and widgets, seeing how some placeholder content responds to all the changes. This gives me a massive headache as I realize how different each theme interprets the displayed text, menus, and sections of the blog. The newer themes also offer more unique, dynamic functions. The upside – cool. The downside – if I ever need to revert to another theme, the site might collapse in on itself. I also begin to realize the regular, free, cookie-cutter options are just not the look I am going for. They are also predictably limited; even something as simple as widening a post’s width or auto-adjusting things to fit different screen sizes while keeping the key content in frame proves impossible in many instances.

Time to be picky and pony up some more cash to find the right match. I decide to purchase a premium theme (one with an affordable lifetime price) that includes plenty of bells and whistles. But I am not interested in the decoration. I want the text to be the focus, not the interactive images. Disabling the various moving galleries and business functions aimed at revenue generation and advertising, I pare the borders down until I am left with something resembling my original vision. It is here, not in the form I dreamt, but in an outline that is tolerable – the beginnings of the blog.

 

Tip 3: Stick to editing the site appearance via the ‘Appearance’ -> ‘Customize’ interface; avoid diving into the programming (site/theme code may be overridden by updates). You can select sections, menus, pages, posts and templates directly and see the changes in real time. The ‘Additional CSS’ text boxes are also valuable. The biggest advantage of a premium theme is that you will not be restricted in what you are able to edit.

And no need to know any code. Search engines, WordPress forums, and widget help pages are your friends. There will be a million posts and it may take some time to find the right one (use as many key words as possible), but others have faced the same issues before. Coding is more universal than most things, so copy/paste and test on your site at will. Carry plenty of patience as an antidote to certain frustration.

 

As I construct things, I notice how much bloatware is included by default in the form of unnecessary plugins. It takes another day to research and determine what needs to stay and what can be deleted.

 

Tip 4: Disable and delete any plugins you are not going to use. Depending on the editors you prefer using (WordPress, Classic, Gutenberg, or Theme editors), you will find plugins to expand functionality. For example, ‘Advanced Editor Tools’ if you use the old-school layout as I do.

Premium themes also come with various site-building functions. This means that you can likely get rid of many auto-installed plugins like those belonging to the BoldGrid, Crio or Elementor families (just some examples).

 

After a few days of tinkering, I believe things are ready. The blog is functioning, posts seem to be publishing fine, all the links and menus work well, and I have a unique email courtesy of the domain provider. Now to focus on the actual writing.

– / – / –

But alas, I run into an immediate issue. Even after they are published, the posts do not seem to be showing up right away. Any site visitor who has not waited half a day before returning would see the same home page. What gives?

I google around and find out this is a caching issue. As noted before, the pages you view these days are hardly static. A new one is generated each time you visit a site based on instructions fed by the source code to your browser. Your browser then saves that version of the webpage until you hit refresh or the browser is forced to reload the page after a set amount of time. I spend a couple of hours learning all about how caching works and fumbling my way through various plugin settings. Nothing seems to be working. (I later gather the reason for this is that not only do the plugins clash with each other, the host provider’s administrative settings are also playing a role in preserving the caching function.) I test everything in three browsers as I download, disable, enable, or adjust various widgets. Agony. Then I finally happen upon some code shared in a forum that seems to do the trick.

It works! Now the site forces the user’s browser to load the latest page no matter how long it has been since their last visit. Problem solved, right? Wrong! This works well for a week until I discover that the custom code I entered into the theme is erased every time the theme updates. Now I need to disable auto-updates and ensure I am re-entering the code into the appropriate files after each, now manual, update. How fun.

 

Tip 5: For those who want their blog to update right away and force the visitor’s browser to load the latest page, by stopping client-side caching, one way to address the issue is to edit your site’s code. There are many ways to do this, but you do not need to open your web panel. You can use the WordPress Dashboard, navigate to ‘Appearance’->’Theme File Editor’ and select the ‘index.php’ file (this is your home page).

Here, throw in the following code a line after “<?php” and a line before “get_header();”:

header(“Cache-Control: no-store, no-cache, must-revalidate, max-age=0”, true);
header(“Cache-Control: post-check=0, pre-check=0”, false);
header(“Pragma: no-cache”, true);

Then hit ‘Update File’. If you want to prevent caching for pages and posts, you can also enter the same code into the ‘page.php’ and ‘single.php’ files.

Et voilà, no more caching.

 

I begin to publish posts and the first couple of months go relatively smoothly. Then someone mentions how I should look into creating a newsletter. It will help with sustaining readership and provide regular reminders, they say. Ok, that should be easy enough. But how would one go about doing that?

I create a newsletter page without any plan in place. I decide I will send it once a month to whoever signs up. A simple email with links to the posts. If someone enters their address, it gets sent to the site admin email. I throw the entries into an excel sheet, and do not bother thinking twice about how all this will work come the last weekend of the month.

When the time comes to share the newsletter, I find out how I have made another error in judgment. Turns out, formatting emails in the crappy webmail system is nigh impossible. Again, I find myself stuck researching a solution to a problem I am responsible for due to lack of foresight. After an excruciating evening, I have learned how to use the ‘Newsletter’ plugin to automate the whole process and send the monthly summary to subscribers. No excel sheets or tracking of emails needed after all.

 

Tip 6: If you have no idea how to use the ‘Newsletter’ plugin or are feeling lost with the plethora of settings available, navigate to ‘Newsletter’->’Settings’ in your WordPress Dashboard and select the ‘Setup Wizard’ tab. This offers a tutorial through all the basic settings and then some.

 

But the newsletter drama is hardly over. A test of the system informs me that my emails are going straight to people’s junk folders or not being delivered, as I have not done the work of authenticating my new site address. The demons start to appear. Daemons, to be exact – Mailer Daemons that show up in my inbox indicating failed or disrupted delivery. The active plugins also do me the favor of repeating these emails so that the daemons multiply while I attempt to appease them.

How does one avoid this fresh hell and authenticate one’s address? As you guessed it, a question that requires a few more hours of familiarizing myself with DMARC records and DNS settings. When will it end.

 

Tip 7: Make sure to create a DMARC entry via your web panel or within your WordPress Dashboard via a trusted widget – a simple or complicated task depending on your web service of choice. You may have to search “how to create DMARC record on [host name]”. I found this page (and plugin) helpful, and it guided me to others that helped me set up my own DMARC record so that the site email is not treated as spam.

 

– / – / –

Another unexpected issue arises a month later – the website is down! I cannot access the web panel, the WordPress admin page, nor any of the site pages. I quickly discover the site host is having global issues. People like me who pay the minimum for some shared real estate on the internet are bound to run into these issues from time to time. Nothing to be done until the systems are back up.

 

Tip 8: Each hosting service will have a public ‘status page’ that you can locate by searching “[hosting service name] status” or something similar. Here is Dreamhost’s, for example. Best to bookmark this page as it alleviates concerns that it is not just you who is facing certain issues.

 

Things roll along fine until the end of June. I prepare the newsletter and hit send, then shut things down. I log on several hours later to find that none of the emails have been delivered. The application is stalled and something is not clicking. Googling around leads me to resolve the issue, after – you guessed it – another couple of hours. Turns out, there is a whole world of settings and virtual instructions known as ‘cron’ events. This name, plucked from many a Greek myth, refers to regular, automated processes that are keeping the clockwork ticking behind the veil. You never need to worry about them, until you do. I try the hard ways first and then find a simpler solution.

 

Tip 9: ‘WP Control’ is a plugin that may make life easy. It displays all the cron events that your site is running or scheduled to run, and the time between them. You can modify settings directly via the plugin and also force events to run rather than wait for the next time interval. Even if some applications are stalled and you need a bit of time to address the core issue, this plugin should let you get around those blocks and give you power to manually run different site functions. For example, forcing a send of newsletters by running the ‘newsletter’ cron event.

 

And that brings us to today. I am sure more issues are on the horizon. Websites are behemoths of interconnected processes and rules. But I am slowly feeling better equipped to tackle them. I never wanted to hire anyone to figure all this out for me. And I did not think the learning curve would be as steep as it was; part of effective self-teaching is also being able to find the correct resources online, a difficult space to fathom. Especially if you do not speak the variety of coding languages out there or find them natural to internalize.

The maintenance of this site invokes an unwelcome feeling on occasion. I recall flipping a page to begin a midterm in one of my early undergraduate courses, fifteen years ago, in Computer Science. The prompt asked us to write code that would produce x, y and z. I cannot remember the specifics. All I recall was that the one-line sentence was followed by two fully blank pages before the next question was listed. That is an intimidating outline within which one must color. Not too dissimilar from the feeling of opening a blank word document with ideas half-formed in your mind, hoping they congeal into coherence as you tap away on the keyboard.

These assignments remain vastly different. But the lessons are linked.

 

Tip 10: Recontextualize annoyance, failure, exasperation, seemingly insurmountable barriers, etc. to fuel motivation. You will find yourself the better for it.