Skip to content

Instantly share code, notes, and snippets.

@cliffordp
Last active February 8, 2022 00:11
Show Gist options
  • Save cliffordp/39e68939132bd0f483e0111972165455 to your computer and use it in GitHub Desktop.
Save cliffordp/39e68939132bd0f483e0111972165455 to your computer and use it in GitHub Desktop.
Override The Events Calendar's V2 Views from a custom plugin location
<?php
/**
* Add your own plugin as a template override location for The Events Calendar, Event Tickets, and related plugins. Only
* for TEC's V2 Views and ET's addons/overrides of TEC's V2 Views. Still need the old snippet for overriding ET's files.
*
* Each custom array's `path` is whatever you want it to be (i.e. customizable) up until the 'v2' part of each
* template's override path. We chose to keep it as `tribe/events` and `tribe/tickets` for simplicity.
* So if the TEC location for a view is:
* /wp-content/plugins/the-events-calendar/src/views/v2/list/event/featured-image.php
* Then this plugin's override location would be:
* /wp-content/plugins/MY-PLUGIN/tribe/events/list/event/featured-image.php
* And the theme's override location would be:
* /wp-content/themes/YOUR-CHILD-THEME/tribe/events/v2/list/event/featured-image.php
* FYI: Parent/Child Themes will override this custom plugin's override. Use your own custom code with the
* `tribe_template_theme_path_list` filter instead of this snippet to trump theme overrides if you must, but that is not
* typical best practice, although it may be necessary in order to override a theme that comes with V2 Views overrides
* (e.g. Avada) that you want to override.
*
* @link https://gist.github.com/cliffordp/39e68939132bd0f483e0111972165455 This snippet is only for V2 Views.
* @link https://gist.github.com/b76421f2490a8b8995493f203e11b331 Similar functionality for pre-TEC v5.x (not V2 views) or for ET.
* @link https://theeventscalendar.com/knowledgebase/k/custom-additional-template-locations/ Official article with all the details.
*
* @see \Tribe__Template::get_template_path_list()
*
* @param array $folders Array of data for loading locations.
*
* @return array
*/
function tribe_v2_additional_plugin_template_locations( $folders ) {
// Example: /app/public/wp-content/plugins/my-plugin/tribe/
$my_base_path = trailingslashit( plugin_dir_path( __FILE__ ) . 'tribe' );
/*
* Custom loading location for overriding The Events Calendar's templates from within this plugin.
*/
$folders['my_plugin_tec'] = [
'id' => 'my_plugin_tec',
'priority' => 5, // TEC is 20, ET is 17, so do something earlier, like 5
'path' => $my_base_path . 'events', // Example: /app/public/wp-content/plugins/my-plugin/tribe/events
];
/*
* Custom loading location for overriding Event Tickets' addons/overrides for TEC's v2 views.
* Still need to use the old/non-v2 snippet to override ET's other template files.
*/
$folders['my_plugin_et'] = [
'id' => 'my_plugin_et',
'priority' => 5, // TEC is 20, ET is 17, so do something earlier, like 5
'path' => $my_base_path . 'tickets', // Example: /app/public/wp-content/plugins/my-plugin/tribe/tickets
];
return $folders;
}
add_filter( 'tribe_template_path_list', 'tribe_v2_additional_plugin_template_locations' );
@helgatheviking
Copy link

@cliffordp I don't suppose you know if it's possible to override a template conditionally? So if the ticket had particular meta key/value pair, display a different extra-price.php template?

@cliffordp
Copy link
Author

Sure. Your custom template could be just that... use this function to point to the custom template and then the custom template could include the original template file if X is true

@helgatheviking
Copy link

That could work. Thank you!

@cliffordp
Copy link
Author

Glad to help! 😺

@quentin-th
Copy link

Hello and thanks for that snippet, it works great !
However, I'm trying to customize the single event template and its meta template files. The file I wanted to edit is details.php which is on modules folder ( /src/views/modules/meta/details.php ),
Do you know if there is a way to do that because your snippet seems to only target files which are in v2 folder ?

Thank you !

@cliffordp
Copy link
Author

Glad to help, but you'll have to contact https://support.theeventscalendar.com/ for additional requests.

@djouonang
Copy link

djouonang commented Dec 15, 2021

Hi clifforp. I really need your help. i have followed your tutorial above and it works fine except for the events calendar pro override. This is my code:

function load_template_plugin($folders, string $template ) {

/*
 * Custom loading location for overriding The Events Calendar's templates from within the deltec plugin
 */
$folders['theevent_calendar_addon'] = [
  'id'       => 'theevent_calendar_addon',
  'priority' => 1, // The Event Calendar is 20, Event Tickets is 17
  'path'     =>  EVENTCALENDAR_DIR . 'tribe/events/v2', 
];

$folders['theevent_calendar_addon_pro'] = [
'id' => 'theevent_calendar_addon_pro',
'priority' => 5, // The Event Calendar is 20, Event Tickets is 17
'path' => EVENTCALENDAR_DIR . 'tribe/events-pro/v2',
];

return $folders;

}

add_filter( 'tribe_template_theme_path_list', 'load_template_plugin', 10, 2 );

when i copy the folder to the theme the events pro works. but i dont seem to see what i am doing wrong with my plugin

@cliffordp
Copy link
Author

@djouonang - as previously stated, you need to contact https://support.theeventscalendar.com/ for additional requests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment