AiO Podcast Studio renders its front-end output using PHP template files bundled with the plugin. You can replace any of these templates with your own version without editing the plugin itself by using your theme’s child theme and the plugin’s template override system. This approach ensures that your customizations are preserved when the plugin is updated.
Contents
- Why Use Template Overrides
- How the Override System Works
- Overriding a Template File
- Available Template Files
- Customizing the Full-Page Layout
Why Use Template Overrides
The plugin’s template files are located inside the plugin folder at wp-content/plugins/aio-podcast-studio/public/templates/. You should never edit files inside the plugin folder directly. When the plugin is updated, WordPress replaces all plugin files with the new version, and any changes you made to the originals will be lost.
The correct approach is to create an override copy of the template in your child theme. The plugin will detect and load your version instead of its own, and your customizations will remain intact through any future plugin update.
How the Override System Works
Every time the plugin loads a template file, it passes the file path through a WordPress filter hook named aiopod_load_template before including it. The filter receives two parameters.
- $template — The full server path to the default plugin template file.
- $attributes — An array of data passed to the template, such as the current post ID, shortcode settings, and display options.
By hooking into aiopod_load_template in your child theme’s functions.php, you can intercept the path and return a different path — the path to your custom copy in the child theme — whenever a specific template is about to load. The plugin will then include your file instead of its own.
Overriding a Template File
Follow these steps to override any plugin template in your child theme.
- Create a child theme if you do not already have one. All overrides must go in a child theme, not the parent theme, to remain safe from theme updates as well.
- Create a folder named
aio-podcast-studioinside your child theme’s root directory. This keeps all podcast plugin overrides organized in one place. - Copy the template file you want to modify from
wp-content/plugins/aio-podcast-studio/public/templates/to a matching path inside theaio-podcast-studio/folder in your child theme. For example, to override the episode card, copypublic/templates/episodes/episode-card.phptowp-content/themes/your-child-theme/aio-podcast-studio/episodes/episode-card.php. Always copy the original file first; do not start from a blank file. - Edit your copy to make the changes you need. Because you started from the original, all existing variables and logic are already in place and you only need to modify the parts relevant to your customization.
- Register the override by adding the following code to your child theme’s
functions.phpfile.
add_filter( 'aiopod_load_template', 'my_child_theme_load_template', 10, 2 );
function my_child_theme_load_template( $template, $attributes ) {
$relative = str_replace(
wp_normalize_path( WP_PLUGIN_DIR . '/aio-podcast-studio/public/templates/' ),
'',
wp_normalize_path( $template )
);
$custom = get_stylesheet_directory() . '/aio-podcast-studio/' . $relative;
if ( file_exists( $custom ) ) {
return $custom;
}
return $template;
}
This code checks whether a matching file exists inside your child theme’s aio-podcast-studio/ folder, preserving the same subfolder structure as the plugin. If a match is found, your version is loaded; if not, the plugin falls back to its own copy. You only need to place override files for the templates you actually want to change — all others continue to use the plugin defaults.
Available Template Files
The following template files are available for override. All paths are relative to wp-content/plugins/aio-podcast-studio/public/templates/.
Single Page Templates
single-podcast.php— The content area of an individual podcast page.single-episode.php— The content area of an individual episode page.single-category.php— The content area of an individual podcast category archive page.single-tag.php— The content area of an individual episode tag archive page.single-participant.php— The content area of an individual participant page.
Podcast Templates
podcasts/podcasts-grid.php— The podcast grid listing output by the Podcasts shortcode.podcasts/podcast-card.php— The card displayed for a single podcast within the grid.
Episode Templates
episodes/episodes-grid.php— The episode grid layout.episodes/episodes-list.php— The episode list layout.episodes/episodes-compact.php— The episode compact layout.episodes/episodes-slider.php— The episode slider layout.episodes/episode-card.php— The card displayed for a single episode within a grid or list.episodes/episode-template.php— The episode item markup used inside the compact and list layout containers.
Category Templates
categories/categories-grid.php— The category grid listing.categories/categories-list.php— The category list listing.categories/categories-dropdown.php— The category dropdown selector.categories/category-card.php— The card displayed for a single category.
Tag Templates
tags/tags-cloud.php— The episode tag cloud.tags/tags-list.php— The episode tag list.tags/tags-dropdown.php— The episode tag dropdown selector.
Participant Templates
participants/participants-grid.php— The participant grid listing.participants/participant-card.php— The card displayed for a single participant.
Filter Templates
filters/form-vertical.php— The vertical search and filter form.filters/form-horizontal.php— The horizontal search and filter form.filters/form-compact.php— The compact search and filter form.
Pagination Templates
pagination/numeric.php— The numeric page navigation.pagination/loadmore.php— The Load More button used for AJAX-based pagination.
Player Template
player/player-card.php— The episode player card rendered within episode listings and on single episode pages.
Customizing the Full-Page Layout
The template override system described above controls the plugin’s own output — the content area inside the page. It does not affect the surrounding page structure such as the header, sidebar, and footer, which are controlled by your active theme.
WordPress uses a template hierarchy to decide which theme file wraps each page. For the plugin’s custom post types, you can create the following files in your child theme root to gain full control over the page layout for each content type.
single-aiopod_podcasts.php— Controls the full page layout for individual podcast pages.single-aiopod_episodes.php— Controls the full page layout for individual episode pages.
To create one of these files, copy the single.php file from your parent theme into your child theme root, rename it to match the post type slug above, and edit it as needed. At minimum, the file should call the_content() within the loop so that the plugin’s single-page template output is still rendered.
If no such file exists in your theme, WordPress falls back through its normal hierarchy — trying singular.php, then single.php, then index.php — until it finds a match. Most themes handle the plugin’s post types correctly through the default hierarchy without any additional files required.