5

We’ve just released a minor update for WPML, resolving two cosmetic bugs and improving performance.

This release handles two small bugs for WPML:

  • Missing slash at the end of alternatives links for sites using language parameters
  • PHP Notice for bbPress pages that link to user profiles

Both of these are not blocking issues, but better fix them than leave as-is.

and, a few issues for WooCommerce Multilingual:

  • Compatibility issue with WooCommerce Ajax Cart: cart quantities were not updating
  • Compatibility issue with WooCommerce Bookings: incorrect bookings were shown in the backend when toggling between admin languages
  • Compatibility issue with the Adventure Tours theme
  • Compatibility issue with the Aurum theme
  • Compatibility issues with the Composite Products plugin
  • Auto-generated slugs on the products translation editor were not made unique
  • Sometimes prices with decimals were subtracted 0.01

Faster loading times, especially on busy servers

The more interesting update in this release is an improvement to WPML’s code loading. WPML includes many PHP files with many classes. In this release, we’ve changed the files mapping, so that the right PHP files are loaded instantly without having to search for the correct file.

The performance gain, due to this change, depends on the server. Very fast servers with SSD drives will feel little improvement (because they can find files quickly). Slower servers that have magnetic (regular) drives, especially when highly loaded, will feel a significant improvement for all admin screens.

We’re sorry to disappoint, but profiling this improvement is difficult. If you’re testing it on your local development machine, results will vary. To really see the impact, you need to simulate a busy system with different access to different URLs.

Faster WooCommerce Products admin screens

We profiled a large number of WooCommerce sites, which clients were kind enough to share with us. On all of them, we noticed that the biggest impact from WPML is on the Products admin screen. This is funny, because WPML doesn’t need to do anything on these pages. WooCommerce Multilingual offers its own “Products translation” interface, so there’s no sense wasting CPU time to display translation controls on the native WooCommerce admin screens.

WPML 3.4.1, together with WooCommerce Multilingual 3.8.1 resolve this inefficiency. By default, we’ll not add translation controls to the WooCommerce Products page. This speeds up the admin significantly, without losing any useful functionality. You can still enable these controls if you want them, but it makes much more sense to translate WooCommerece products via WPML->WooCommerce->Products. Our dedicated products translation page includes everything that you need and loads a lot faster.

So, when you need to manage WooCommerce products, you’re not going to pay in performance for having a multilingual site.

Next, faster String Translation

WPML 3.5 will include a set of improvements for String Translation. String Translation in the development version already runs twice faster than in WPML 3.4.1. However, this isn’t all. We’re targeting now the advanced String Translation features, trying to make them run with minimal performance impact. We’re like you to be able to use automatic string registration always and not feel performance loss.

Update WPML

As always, you will receive automatic updates to the WordPress admin for all registered sites. You can register as many sites as you need, for yourself and for your clients. To download manually, log in to your WPML.org account and go to Downloads.

Feedback? Ideas? Suggestion?

Leave your comments and we’ll get back to you.

5 Responses to “WPML 3.4.1 Fixes Small Glitches and Improves Performance”

  1. Unfortunately, it appears that the following

    [wpmlcore-3034] Fix missing slash at the end of alternatives links

    has broken our theme (a modified version of Alpine).

    When viewing a non-English version, a stylesheet link gets modified to …dynamic.css/?lang=es… (i.e. with a trailing slash) which 404s.

    Is this an issue with WPML or the theme?

  2. Hi Tim,

    It’s hard to say without testing your theme, especially that it was modified, I looked at the ticket you mention and obviously it went successfully through QA.

    Please open a support ticket at our forum, our supporters will help us debug and if needed I’ll make sure a compatibility developer will handle further.

    Thanks!

  3. Hi, Im sending two repair for two bugs

    1))))))))))))))))))))))))))))))

    related https://support.advancedcustomfields.com/forums/topic/conflict-between-wpml-and-acf/
    my fix is in file
    sitepress-multilingual-cms\res\js\tags.js

    jQuery(document).ready(function(){
    if(jQuery(‘form input[name=”action”]’).attr(‘value’) ===’add-tag’){
    jQuery(‘.form-wrap p[class=”submit”]’).before(jQuery(‘#icl_tax_menu’).html());
    }else{
    jQuery(‘#edittag table[class=”form-table”]:first tr:last’).after(”);
    //jQuery(‘#edittag table[class=”form-table”]:first’).append(jQuery(‘#edittag table[class=”form-table”] tr:last’).clone());
    jQuery(‘#edittag table[class=”form-table”]:first tr:last th:first’).html(‘ ‘);
    jQuery(‘#edittag table[class=”form-table”]:first tr:last td:last’).html(jQuery(‘#icl_tax_menu’).html());
    }
    …..

    2))))))))))))))))))))))))))))))
    I have some filter for admin_url path, so this code is bad in WPML -> there should be admin_url(”)
    private function print_js_globals(){
    /*
    $icl_ajax_url_root = rtrim ( get_site_url (), ‘/’ );
    if ( defined ( ‘FORCE_SSL_ADMIN’ ) && FORCE_SSL_ADMIN ) {
    $icl_ajax_url_root = str_replace ( ‘http://’, ‘https://’, $icl_ajax_url_root );
    }
    $icl_ajax_url = $icl_ajax_url_root . ‘/wp-admin/admin.php?page=’ . ICL_PLUGIN_FOLDER . ‘/menu/languages.php’;
    */
    $icl_ajax_url = admin_url(‘admin.php?page=’.ICL_PLUGIN_FOLDER.‘/menu/languages.php’);

    Thank you


    • jQuery(document).ready(function(){
      if(jQuery('form input[name="action"]').attr('value') ==='add-tag'){
      jQuery('.form-wrap p[class="submit"]').before(jQuery('#icl_tax_menu').html());
      }else{
      jQuery('#edittag table[class="form-table"]:first tr:last').after('');
      //jQuery('#edittag table[class="form-table"]:first').append(jQuery('#edittag table[class="form-table"] tr:last').clone());
      jQuery('#edittag table[class="form-table"]:first tr:last th:first').html(' ');
      jQuery('#edittag table[class="form-table"]:first tr:last td:last').html(jQuery('#icl_tax_menu').html());
      }

  4. omg 😀 sorry for spaming
    but line with jquery after function have etc…

    jQuery(‘#edittag table[class=”form-table”]:first tr:last’).after(‘ tr th /th td /td /tr’);