cliff
3/31/2018 - 4:52 PM

The Events Calendar: Change Event Archives' iCalendar export links to webcal://

The Events Calendar: Change Event Archives' iCalendar export links to webcal://

<?php
/**
 * The Events Calendar: Change Event Archives' iCalendar export links to webcal://
 *
 * This causes the "iCal Export" button to recommend to calendar applications
 * (e.g. Apple, Outlook, etc.) that they should *subscribe* instead of *download*.
 *
 * We have to use JavaScript instead of PHP because the "Export Events"
 * iCalendar link gets built via JS via
 * /wp-content/plugins/the-events-calendar/src/resources/js/tribe-events.min.js
 * (the script with the `tribe-events-calendar-script` handle).
 *
 * If we were to use PHP (using the `tribe_get_ical_link`,
 * `tribe_get_single_ical_link`, and `tribe_events_force_filtered_ical_link`
 * filters), the link would be static instead of being dynamic to things like
 * an Event Category archive page.
 *
 * @link https://gist.github.com/cliffordp/be034504a2c530495b7d58e704352069
 * @link https://tribe.uservoice.com/forums/195723-feature-ideas/suggestions/31305556-add-true-subscribe-functionality-for-ical-google
 */
add_action( 'wp_footer', 'cliff_ical_link_js_override_webcal', 100 );
function cliff_ical_link_js_override_webcal() {
	wp_enqueue_script( 'jquery' );
	?>
    <script type="text/javascript">
		jQuery( document ).ready( function ( $ ) {
			var url = $( 'a.tribe-events-ical' ).attr( 'href' );

			url = url.replace( 'https://', 'webcal://' );
			url = url.replace( 'http://', 'webcal://' );

			$( 'a.tribe-events-ical' ).attr( 'href', url );
		} );
    </script>
	<?php
}