تخطي الملاحة

Open

Reported for: إضافة WPML Multilingual CMS 4.6.9

Topic Tags: Compatibility

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:
    /*
    *  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.

ترك رد

يُرجى البقاء في الموضوع والتزام الاحترام للآخرين. إذا كنت بحاجة إلى مساعدة بشأن المشكلات التي لا تتعلق بهذا المنشور، فاستخدم منتدى الدعم لبدء محادثة أو إرسال تذكرة.

يمكنك استخدام هذه العلامات:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>