Custom Folders for Customizing V1 Calendar Templates
? This article pertains specifically to the legacy calendar views. If you’re using the 5.x updated calendar views, check out this article.
Our guide to Customizing Template Files details how to customize the calendar’s layout templates by overriding them in your WordPress theme, but you can also override them in your own custom plugin as well, or even your top-level theme directory instead of within your active theme’s folder. The benefit of this flexibility is that you’re safeguarded from losing your custom work if your theme updates or if you want to track your plugin’s changes in a version control system even if your active theme isn’t tracked there.
When you create your own folder to override calendar template files, you’ll need to tell The Events Calendar or Event Tickets to look there for customizations. Using the following snippet below, you can point the plugin to look there:
<?php /** * The Events Calendar and related plugins: Add your own location for template file loading. * * Example "Single Event within List View" for Avada theme (which has theme overrides). * Now tries to load in this order: * This plugin: /app/public/wp-content/plugins/my-plugin/tribe-events/list/single-event.php * Theme root so it stays even if switch themes: /app/public/wp-content/themes/tribe-events/list/single-event.php * Child theme with theme overrides: /app/public/wp-content/themes/Avada-Child-Theme/tribe-events/list/single-event.php * Parent theme with theme overrides: /app/public/wp-content/themes/Avada/tribe-events/list/single-event.php * Plugin default: /app/public/wp-content/plugins/the-events-calendar/src/views/list/single-event.php * * @link https://gist.github.com/b76421f2490a8b8995493f203e11b331 * * @see \Tribe__Events__Templates::getTemplateHierarchy() * * @param string $file The full file path trying to be loaded. * @param string $template The template name, such as * * @return string */ function tribe_additional_template_locations( string $file, string $template ) { // Put them in the order of priority (first location gets loaded before second location if first exists) $new_locations = [ 'my_plugin' => trailingslashit( plugin_dir_path( __FILE__ ) ) . 'tribe-events', // /app/public/wp-content/plugins/cliff-test-tec/tribe-events/default-template.php 'themes_root' => trailingslashit( get_theme_root() ) . 'tribe-events', // /app/public/wp-content/themes/tribe-events/default-template.php ]; foreach ( $new_locations as $location ) { $new_file = trailingslashit( $location ) . $template; if ( file_exists( $new_file ) ) { return $new_file; } } return $file; } add_filter( 'tribe_events_template', 'tribe_additional_template_locations', 10, 2 );