Jamie Williams 💻

WordPress & frontend developer


← Home

Parish Theme + Companion Plugin ⛪︎

2026

Parish theme + companion plugin

Description

Reusable WordPress classic theme + companion plugin for structured real-world parish websites and easy setup for non-technical users. Features an admin onboarding page and settings page for parish details, CPTs, taxonomies, custom form handling and more.

Tech Stack

  • HTML/CSS
  • JavaScript
  • PHP
  • WordPress
Parish theme + companion plugin

📌 Project Overview

Many Catholic parish websites use WordPress but have these problems:

  • Inconsistent design
  • Poor content structure
  • Excessive flexibility leading to clutter
  • Lack of technical best practices
  • Security vulnerabilities

Catholic Parish theme and core plugin were built to:

  • Prioritise clarity over excessive flexibility
  • Give structured, parish specific content types
  • Follow WordPress architecture standards
  • Help non-technical parish admins, secretaries and volunteers

The project consists of:

  • 🎨 A classic WordPress theme built from scratch (presentation layer)
  • 🔌 A companion plugin (core functionality layer)

Originally the plugin features were registered in the theme. I later separated it out for content portability if the user decides to switch themes. The plugin GitHub repository is here: https://github.com/jamiewilliamsxyz/catholic-parish-core


🎨 Theme Features

Front Page

  • Hero section (customisable via Customizer)
  • Latest announcements (pulls from Announcement CPT)
  • Content section (editable via the page editor)
  • Services section (pulls from Service CPT)

Menus

  • Primary navigation menu
  • Footer general links menu
  • Footer social links menu

Custom JavaScript

  • Mobile hamburger menu with a toggle
  • Scroll triggered card animations for the front page

Customizer Options

  • 🎨 Accent colour
  • 🔤 Typography controls
  • 🖼 Hero title, text and background image
  • 🗺 Google Maps embed (for the Contact Page template)
  • 📝 Footer title, description and copyright text

Contact Page Template

  • Content section
  • Parish details card (data pulled from the plugin)
  • Custom contact form
  • Google Map embed

Custom Post Type Features

  • Custom content for each CPT
  • Pagination template part for CPT archives
  • Taxonomy term filtering for relevant CPT archives

Admin Experience

  • Parish Setup Guide admin page (onboarding for non-technical users)
  • Conditional admin notice if the companion plugin is missing

Security

  • Input sanitisation and output escaping
  • Capability checks

Other

  • Fully responsive design (mobile-first)
  • Fully translatable with .pot file, textdomain and i18n functions
  • Reusable template parts

🔌 Plugin Features

Custom Post Types

  • Announcement
  • Service
  • Newsletter
  • Parish Staff
  • Church Group

Custom Taxonomies

  • Parish Staff Type taxonomy
  • Church Group taxonomy

Meta Boxes

  • Custom meta box fields for each CPT
  • Dynamic “Add post” placeholder text modifications depending on CPT

Content Enhancements

  • Contact form handling (secure with nonce verification)
  • Shortcodes:
    • [parish_phone]
    • [parish_email]
    • [parish_church_address]
    • [parish_office_address]
    • [parish_office_hours]
    • [parish_details]

Parish Details Settings Page

Built using the WordPress Settings and Options APIs:

  • Phone
  • Email
  • Church Address
  • Office Address
  • Office Opening Hours

Security

  • Input sanitisation
  • Output escaping
  • Nonce verification (for Meta Boxes and contact form)
  • Capability checks

Other

  • Conditional admin notice if the theme is missing
  • Fully translatable with .pot file, textdomain and i18n functions

🧰 Tech Stack

  • WordPress
  • PHP
  • HTML5
  • CSS

Development Tools

  • Figma (designing and prototyping)
  • Local (local WordPress development environment)
  • Git & GitHub (version control and repository management)
  • VS Code (code editor)

📚 What I Learned

This was my first complete WordPress theme + plugin project with the goal being to deepen my understanding of WordPress development.

🔐 Contact Form & Meta Box Input Handling

  • Security & Data Handling: Developing the contact form handling and custom metaboxes meant I had to properly sanitise, validate and escape user input. I learned how to use nonces for verification and handle data securely.

🔌 Extracting Functionality Into Companion Plugin

  • Architectural Thinking: Originally I had CPTs, shortcodes, taxonomies, Meta Boxes and contact form logic inside the theme. Refactoring them into the plugin helped me to understand content portability and separation of concerns.

🖥 Creating a Setup Guide Page & Admin Notices

  • Practical UX Thinking: I had to think about my target audience and their level of technical knowledge to create a theme and plugin that could be implemented and set up smoothly. That’s why I created admin notices to warn the user if the theme or plugin is not active and why I created a detailed parish setup guide admin page. This forced me to think like a user which improved my practical UX thinking.

⚙️ Using WordPress APIs

  • System-Level Understanding: Working with the different WordPress APIs like the Settings API, Options API and the Customizer API taught me how WordPress structures data internally. I learned how to handle these APIs to create a functional theme and plugin.

🔮 Future Improvements

  • Refactor CSS Into Scalable Architecture: Implement a more structured system such as BEM to improve maintainability.
  • Improve Contact Form: Allow users to choose an email to send the form submissions instead of it only being sent to the site admin.
  • Expand Shortcodes: Add more shortcodes and turn some components such as the Google Map embed into one.
  • Add More Site Customisation Options: Add primary and secondary colour options as well as options for layout.

📸 Screenshots

Front Page - Desktop View

Front page – desktop view

Church Group Archive - CPT Archive With Taxonomy Terms Filter

Church group archive – CPT archive with taxonomy terms filter

Announcement Archive - CPT Archive With Pagination

Announcement archive – CPT archive with pagination

Announcement Post - CPT Post

Announcement post – CPT post

Contact Page Template - Map Embed & Secure Contact Form

Contact page template – map embed & secure contact form

Add Parish Staff - Custom Post Type Admin UI

Add parish staff – custom post type admin UI

Parish Details - Custom Settings Page

Parish details – custom settings page

Parish Setup Guide - Custom Admin Onboarding Page

Parish setup guide – custom admin onboarding page

Customizer - Custom Sections

Customizer – custom sections

Front Page - Mobile View

Front page – mobile view