As part of a new location being planted in Greer, SC, my church family needed a new website on WordPress, which is the platform Pastor Greg Lundstedt was most familiar with. However, all the church’s previous sermon recordings were stored on a separate website. We needed a convenient way for visitors to check out the recordings without seeing a different brand lingering from the former location.
Background and Challenge of This Project
I started working with Greg on this website in 2022, about one year after we moved to South Carolina to prepare to plant a church in the Greer area. The main challenge was to create a WordPress website with a clean and modern design that would provide an online presence for our new church plant.
Our old website was branded for the previous location, so Greg wanted to gradually phase it out. The written content was re-usable with few updates.
I offered to build a new WordPress website that would provide a user friendly online presence for visitors, while also enabling a connection to the old sermons. However, all the existing content was stored in the outdated theme, which would not be easy to migrate without advanced SQL code, which I was not familiar with at the time.
Custom Website Solution
Unlike the Equipping the Saints website, this project was for a new local church that needed to manage their location information across several pages of content. Instead of looking for a free or paid plugin to help with this need, I created a custom plugin that used the WordPress settings page and options API’s to create a shortcode settings page.

Here is an example of some code:
<?php
/**
* Plugin Name: Equipping Bible Church Settings Plugin
* Version: 1.0
* Description: Add shortcodes options page to settings menu
* Author: EBC
* Author URI: https://equippingbc.org
* License: Copyright Equipping Bible Church. All rights reserved.
* Text Domain: equipping-bible-church
*/
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Table of Contents
*
* 1. Options Page
* 2. Shortcodes
*/
// 1. Options Page
add_action( 'admin_menu', 'ebc_options_page' );
add_action( 'admin_init', 'ebc_settings_init' );
function ebc_options_page() {
$page_title = 'Equipping Bible Church Settings';
$menu_title = 'EBC Shortcodes';
$capability = 'manage_options';
$menu_slug = 'equipping_bible_church';
$function = 'ebc_options_cb';
$position = 80;
add_options_page( $page_title, $menu_title, $capability, $menu_slug, $function, $position );
}
...
Some highlights from the above:
- This is only the first section of code for the EBC settings plugin, so it has the standard plugin comment block, creates an options page (that lives under the settings tab in the admin dashboard), and sets up the settings fields with their markup and functions
- I like including helpful things like a table of contents and the attribute names as variables in the options page function
- I am omitting the settings API calls (register_setting(), add_settings_section(), and add_settings_field()) because several fields are added, but I basically just copied the boiler plate code from the WordPress Plugin Developer Handbook and customized it as needed
In the Equipping the Saints website project, I learned how to use variables from another PHP file in a shortcode. However, in this project, I learned how to save and retrieve data from the database through the get_option() function for use in a shortcode:
// 2. Shortcodes
/**
* [ebc] returns the Church name
* @return string
*/
function ebc_shortcode() {
$options = get_option( 'ebc_settings' );
return $options['ebc_name_text_field'];
}
// other shortcodes defined here
/**
* Central location to create all shortcodes.
*/
function ebc_init() {
add_shortcode( 'ebc', 'ebc_shortcode' );
// other shortcodes added here
}
add_action( 'init', 'ebc_init' );
This page would allow Greg to update any new information like address and phone number changes by editing the data in one place, rather than having to update it across the whole site.
Theme and Plugins
Once again, I chose to work with the GeneratePress theme, which has been my go to for professional website projects for a while. The theme provided the ability to control styles and settings in a standardized way through the Customizer API and a theme settings page. I like that you can choose to turn off settings modules you don’t use, like the site library.
One free plugin I appreciated getting to use for the first time was the White Label CMS plugin, which made it really easy to customize the login page and simplify the admin experience for any non-admin users.

I added the Simple History plugin to give Greg an easy to manage record of changes on the site, so he could quickly track and roll back any mistaken changes by helpers who might upload content later on.
In this project, I also installed the GenerateBlocks plugin to make it easier for Greg to make changes to the initial layout I created. I made a global style for a site wide hero section element, which was a good proof of concept, although I didn’t need to use it much beyond that.
The Sermon Manager Situation
Like the Equipping the Saints website, I decided to add the Sermon Manager plugin to this site as well. However, after seeing how long it takes to manually transfer content, we decided to continue uploading new sermons to the old site and simply link to the original site’s series page from the new site.
I tried adding an iframe on a blank page on the new site, linking/referring to the series page on the original site. At first, it looked great and worked really well because I made the iframe’s height equal to the height of the content I was trying to pull in, so there wasn’t any vertical scroll bar.

The only problem was that there was some essential JavaScript on the existing site that wasn’t working in the iframe, so for now, we had to scrap that idea.
Ideally, my goal would be to research the necessary SQL code to migrate the existing content over so that we can forget iframes and links and move forward with Sermon Manager, since Greg finds it easier to use than the old Joomla site, especially for automatically managing the podcast.
This should be possible by looking at each database and mapping the fields from the first one to the second one. I look forward to completing this last step when time permits.
If this project seems like something you could benefit from, feel free to let me know. Or, if you have any questions about how I built a local church website on WordPress, I’d be glad to share some details.