Skip to content
/* ==========================================================================
THE EVENTS CALENDAR + WPML : liens des vues sur les pages catégorie
Remplace le motif de réécriture resté dans l'adresse
(ex. /evenements/category/[/]+*([/]+)/mois/) par le slug de la catégorie.
========================================================================== */
function maat_tec_repair_category_url( $url, $slug ) {
if ( ! is_string( $url ) || '' === $url || empty( $slug ) ) {
return $url;
}
$decoded = rawurldecode( $url );
// Rien à corriger : pas de motif de réécriture dans l'adresse
if ( false === strpos( $decoded, '[' ) && false === strpos( $decoded, '(' ) ) {
return $url;
}
// Couvre (?:[^/]+/)*([^/]+) et ses variantes abîmées, comme [/]+*([/]+)
$pattern = '#\(?(?:\?:)?\[\^?/\]\+/?\)?\*\(\[\^?/\]\+\)#';
$fixed = preg_replace( $pattern, rawurlencode( $slug ), $decoded );
return ( null === $fixed || $fixed === $decoded ) ? $url : $fixed;
}
// 1. Adresses « propres » calculées par The Events Calendar (chargement de la page)
add_filter( 'tribe_rewrite_canonical_url', function ( $resolved, $url ) {
$query = wp_parse_url( (string) $url, PHP_URL_QUERY );
if ( ! $query ) {
return $resolved;
}
parse_str( $query, $args );
if ( empty( $args['tribe_events_cat'] ) || ! is_string( $args['tribe_events_cat'] ) ) {
return $resolved;
}
return maat_tec_repair_category_url( $resolved, $args['tribe_events_cat'] );
}, 20, 2 );
// 2. Adresses des vues renvoyées en AJAX (clic sur Liste / Mois / Jour / Aujourd'hui)
foreach ( [ 'tribe_events_views_v2_view_url', 'tribe_events_views_v2_view_prev_url', 'tribe_events_views_v2_view_next_url', 'tribe_events_views_v2_view_today_url' ] as $maat_hook ) {
add_filter( $maat_hook, function ( $url, $canonical = false, $view = null ) {
if ( ! is_object( $view ) || ! method_exists( $view, 'get_context' ) ) {
return $url;
}
$cat = $view->get_context()->get( 'event_category' );
if ( is_array( $cat ) ) {
$cat = reset( $cat );
}
if ( is_numeric( $cat ) ) {
$term = get_term( (int) $cat, 'tribe_events_cat' );
$cat = ( $term instanceof WP_Term ) ? $term->slug : '';
}
return is_string( $cat ) ? maat_tec_repair_category_url( $url, $cat ) : $url;
}, 20, 3 );
}
unset( $maat_hook );