Relevanssi click tracking

<?php
/**
 * this is a sample snippet to apply relevanssi click tracking to links
 * within the results of a facetwp listing builder template
 * on a page with a search facet set to the relevanssi search engine
 */

/**
 * hijack facetwp_template_html to modify links within template
 * to add relevanssi click tracking
 */
add_filter( 'facetwp_template_html', function( $return, $renderer ) {
	if ( 'my_listing' == $renderer->template["name"] ) {  // change 'my_listing' to name of your listing
		/** there are different filters for get_post type depending on type of posts
		 * unneeded filters can be removed if they are not included in the search results
		 **/
		add_filter( 'post_link', 'fwp_add_rel_tracking', 10, 2 ); // use for posts
		add_filter( 'page_link', 'fwp_add_rel_tracking', 10, 2 ); // use for pages
		add_filter( 'post_type_link', 'fwp_add_rel_tracking', 10, 2 ); // use for custom post types
		// this fakes a get_search_query string which doesn't get created from a search facet
		add_filter( 'get_search_query', function( $keywords ) {
			return FWP()->facet->facets["my_search"]["selected_values"]; // change "my_search" to match the name of your search facet
		});
	}
	return $return; // eturn 
}, 10, 2);

/**
 * hijack facetwp_render output filter to remove relevanssi click tracking
 * after facetwp template has completed output
 */
add_filter( 'facetwp_render_output', function( $output, $params ) {
	remove_filter( 'post_link', 'fwp_add_rel_tracking', 10 );  // use for posts
	remove_filter( 'page_link', 'fwp_add_rel_tracking', 10 );  // use for pages
	remove_filter( 'post_type_link', 'fwp_add_rel_tracking', 10 );  // use for custom post types
	return $output; // return 
}, 10, 2);

/**
 * function to hook on get_permalink filters to add relevanssi
 * click tracking
 */
function fwp_add_rel_tracking( $link, $post ) {
	if ( function_exists( 'relevanssi_add_tracking') ) {  // make sure the relevanssi_add_tracking exists
		$link = relevanssi_add_tracking( $link );
	}
	return $link;
}