Open
Reported for: WPML Multilingual CMS 4.6.9
Overview of the issue
If you are using The Events Calendar plugin, you may encounter issues with event calendar links redirecting incorrectly, displaying patterns like (/?:month|monat|miesic|…).
Workaround
Please, make sure of having a full backup of your site before proceeding.
- Open your theme’s functions.php file.
- Add the following code:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
/*
* WPML Workaround for compsupp-6815 (updated version for compsupp-7184)
*/
add_filter(
'tribe_rewrite_canonical_url'
,
'wpml_compsupp6815_resolve_missing_urls'
, 10, 3 );
function
wpml_compsupp6815_resolve_missing_urls(
$resolved
,
$url
,
$object
) {
if
(
class_exists
(
'Sitepress'
) ) {
$wpml_default_lang
= apply_filters(
'wpml_default_language'
, NULL );
$wpml_current_lang
= apply_filters(
'wpml_current_language'
, NULL );
// Let's register the calendar strings so we can translate and use in the workaround
if
(
$wpml_default_lang
==
$wpml_current_lang
) {
$tec_options
= get_option(
'tribe_events_calendar_options'
);
$events_slug
=
$tec_options
[
'eventsSlug'
];
$single_events_slug
=
$tec_options
[
'singleEventSlug'
];
do_action(
'wpml_register_single_string'
,
'the-events-calendar'
,
'TEC Calendar Slugs: '
.
substr
(
$events_slug
, 0, 20),
$events_slug
);
do_action(
'wpml_register_single_string'
,
'the-events-calendar'
,
'TEC Calendar Slugs: '
.
substr
(
$single_events_slug
, 0, 20),
$single_events_slug
);
foreach
(
$tec_options
[
'tribeEnableViews'
]
as
$calendar_string
) {
do_action(
'wpml_register_single_string'
,
'the-events-calendar'
,
'TEC Calendar Slugs: '
.
substr
(
$calendar_string
, 0, 20),
$calendar_string
);
}
}
// Check if the URL is not resolved yet. If not, we will resolve it with the translated strings
if
( preg_match(
'#(/?:([^)]+))#'
,
$resolved
) ) {
$resolved
= preg_replace_callback(
'#(/?:([^)]+))#'
,
function
(
$matches
)
use
(
$url
) {
$options
=
explode
(
'|'
, trim(
$matches
[0],
'/(?:)'
));
$slug
=
$options
[0];
$translated_slug
= apply_filters(
'wpml_translate_single_string'
,
$slug
,
'the-events-calendar'
,
'TEC Calendar Slugs: '
.
substr
(
$slug
, 0, 20) );
// Only apply the translation if the string already exists in the URL. If not, replace with the original. This may avoid possible 404 errors
if
(in_array(
strtolower
(
$translated_slug
),
$options
) &&
$translated_slug
!=
''
) {
$slug
=
$translated_slug
;
}
return
$slug
;
},
$resolved
);
// Check if there are parameters in the final result and correct the first "&" to "?"
if
(
strpos
(
$resolved
,
'&'
) !== false &&
strpos
(
$resolved
,
'?'
) === false) {
$resolved
= preg_replace(
'/&/'
,
'?'
,
$resolved
, 1);
}
}
}
return
$resolved
;
}
- Then, go to Settings > Permalinks and resave your permalinks.
Note: if the issue remains, please open a chat in our assistance channel.