[GUIDE] Global WooCommerce: WPML, hreflang, SEO, CloudFlare, Cache

Oh how easy making woocommerce fully multilingual, fully multicurrency and sharing a same order & user base would be…

Key decisions must be made before transforming your store from a single en-us to a massive global subdomained or subdirectoried or ccTLD’ed enterprise.

WooCommerce powers 30% of online stores and I’m surprised at the lack of guides available in this area.

Before you start attempting to make your site multilingual and multi-currency:

Buy a separate domain (or use a free .tk if you running on a budget) so you can mess around with the site because the process can become a very big mess, very fast.

Make a copy of your site on a new hosting account with the new domain, replace all old website strings with new site website strings in the new database in phpmyadmin. Put a maintenance plugin on the development copy, and/or block search spiders so that your development site doesn’t get indexed. The old spider blocking plugin I used to use has been deleted from the WordPress plugin directory, but you can use this copy. Add these additional robots so that your development site doesn’t get indexed:

bingbot,Googlebot,Yahoo! Slurp

For a super simple multi-currency, Cloudflare friendly, wp-rocket and nginx cache proof woocommerce store use the following plugins:

Aelia Foundation Classes for WooCommerce
Aelia Currency Switcher for WooCommerce
WooCommerce Cache Handler by Aelia

Otherwise, for the more complex solution involving subdomains or directories, keep reading.

Big Decisions:

Subdomains or Subdirectories or separate tld’s.

Subdomain Real World Pros:

Store appears more international (usa.store.com, ru.store.com, es.store.com, canada.store.com, etc.).
In fact, the separate CC-tld’s can also look similarly as big (store.us, store.ru, store.es, store.ca, etc.).

Subdomain Real World Cons:

Not immediately obvious that you’re in the correct store (e.g. iPhone browser bar only showing domain)

Is there a SEO deficit from using subdomains? Debatable: ahref lang seems to be treated in a way that is similar to canonical redirects, especially in terms of SEO losses. It’s in Google’s interest to show users the most relevant page, so instead of the usa.store.com URL, canadian googlers will see it replaced in their search results with the canada.store.com URL, if you’ve set it up correctly.

Problems automatically solved by WPML:

Same database – all-in-one-place order management, user database, admin area, plugins across all stores.

Same server (pro or con, but if you’re using Cloudflare, Google knows every visitor will see a “fast copy” of your site, negating SEO losses from potential server location arguments)

Cross-subdomain cookie management is automatically solved by WPML:

WPML cross domain cookie management

Problems not solved by WPML:

WPML has multicurrency capability but we found Aelia Currency Switcher for WooCommerce to be outstanding with and without WPML.

If you’re not using a subdomained or subdirectoried or ccTLD’ed store, but still want to have priced displayed based on geolocation, stick to using Aelia Currency Switcher for WooCommerce.

Last question before turning on WPML: is your theme WPML compatible?

Hopefully yes, otherwise you might have issues later, especially if the theme designer has left erroneous tags in the header.

In our case, the theme was actually abandoned on themeforest, so my last suggestion on theme choice is pick a theme that has been around for a while. We’re picking up the sticks now in terms of plugins going forward but the original theme remaining “old”.

Now You’ll need:

WPML Multilingual CMS
WPML String Translation
WPML Translation Management
WPML Media

WPML plugins for multilingual store

Install each, starting with WPML Multilingual CMS which is the base plugin.

Follow the prompts.

Add these A Records (or equivalent) to your DNS for WPML to work:

We added fr, ru and us for French, Russian and American stores respectively.

DNS records for WPML wordpress

Add these domain alliases (or equivalent) to your new “sites” in order for WPML to work:

WPML aliases dns subdomain

Add these subdomain setups (or equivalent) to your Language URL format in WPM:


We turned off “validate on save” and visited the URL and they seems to work even though we were receiving a not valid error. That error is now gone, most likely a DNS cache issue.

When you visit ru.mystore.com you should get a 404 or untitled but the URL should be valid in the URL bar.

Now install WooCommerce Multilingual which is available on the wordpress.org plugin base and follow the prompts.

It will install missing shop pages in the correct languages and translated URLs (cart, checkout, my account, etc.)

This plugin gladly went ahead and installed full translated shop, account, checkout & cart pages:

French: Boutique, Mon compte, Panier, Blog

Russian: Корзина, Магазин, Блог, Отследить Ваш Заказ

Bonus: Yoast will automatically create a sitemap for each new subdomain.

Head to pages, posts, products and duplicate each in the respective language. Fill in your translations etc, etc.

This solution worked more than perfectly for us, especially since WPML, Yoast, WP-Rocket, WooCommerce and all our favourite plugins all work together just perfectly.


How To Install 100% Working Photoshop CS6 or CC on Ubuntu, Debian, Mint!

On my previous Ubuntu 14.04 setup, I was running wine perfectly.

However, on my bare-bones Debian 8 installation, I was having deep frustrating problems with some random incompatibilities in the order of the way I tried to install wine.

By far the easiest way to install Photoshop CS6 100% working on Linux is with a program called PlayOnLinux that uses wine.

Update 2019: Use Crossover instead of PlayonLinux! Use my other  Tutorial here:

Photoshop CC 2018 on Arch or Manjaro

How To Install Photoshop CC & Photoshop CS6 on Linux

First, go to photoshop.com or adobe.com and find a trial download version of photoshop.

Then, download a program called PlayOnLinux. PlayOnLinux is a graphical version of wine that automatically installs the relevant versions of wine and libraries so you don’t have to worry about anything.

sudo apt-get install playonlinux

Open PlayOnLinux and click Install a program.

(In the image below ignore my installation of Photoshop CS6 because during this tutorial I will be installing Photoshop CC on Debian 8.)

How To Install Photoshop on Linux, Debian, Ubunut, Mint, Fedora.

Choose Photoshop CS6 and press Install:

Playonlinux install photoshop cs6 cc debian ubuntu linux

Then click on Next, and then Browse, and then navigate into your downloaded Photoshop folder and find Set-up.exe.

Choose a New Virtual Drive.

BONUS: Get all your fonts from Windows into your Photoshop CC/CS6 installation on Linux!

For a while, I was using Photshop inside virtual box. The only reason I kept using a virtual machine was because I had all of my fonts in there…

To move fonts to your new PlayOnLinux installation of Photoshop:

Open your file manager.

Navigate to:


Open the folder of your relevant installation.

Enter the folder called drive_c, then windows, then Fonts.

You can paste all your .otf and .ttf font files here and next time you open Photoshop, you will be able to use those fonts.

If you are currently using Photoshop, save your work, close Photoshop & PlayOnLinux, and then open it again. Your fonts will be ready to use.

Alot of guys tell me the only reason they are still using Mac or Windows is either because of games or photo and video editing software.

What I will say to you is that you can run quite a lot of the most proprietary of software inside of a linux machine.

How To Download & Install Launchpad & PPA Programs/Files Super Easy

One morning my Ubuntu installation stopped . I’m now feel a lot more comfortable with linux distributions but at the time I was freaking out.

For this example, I will be installing the .deb file of Conky Manager by Tony George which is an awesome system load manager that displays real-time system load, CPU & RAM usage.

When you want to use PPA or any other .deb based application,

Install a .deb file from PPA or another random website

Make a folder in your Downloads or Documents folder called Debs.

Move the .deb file that you downloaded to that folder.

Right click on the .deb file, select “Open with GDebi Package Installer”.

Click “Install Package” (may need sudo password)

This will install all relevant dependencies too.

This method does not fill your /etc/apt/sources.list with a whole heap of random URLs.

To uninstall a .deb file at a later date

Go back to the folder called Debs that we created earlier.

Right click, “Open with GDebi Package Installer”.

Click “Remove Package”.

How To Update Flash on Firefox & Iceweasel Debian or Ubuntu

“This plugin is vulnerable and needs to be updated”

Yes, flash is notoriously vulnerable and is updated almost weekly because it’s in almost everyone’s browser and is an easy target for hackers.

To update flash on Debian, open a terminal and execute:

sudo /usr/sbin/update-flashplugin-nonfree --install

This will download the latest flash plugin for firefox/iceweasel and install it into your browser:


Update flash on firefox or iceweasel Debian before.


Update flash on firefox or iceweasel Debian after.

How To Delete The First Column In A CSV File Inside a Bash Script

You’re writing a script that maybe works with a CSV that you’ve downloaded as a cron job and want to delete the first column so that it uploads nicely somewhere else, maybe to a MySQL database.

Delete the first column:

sed -i 's/[^,]*,//' thespreadsheet.csv

Delete the first two columns:

sed -i 's/[^,]*,//' thespreadsheet.csv
sed -i 's/[^,]*,//' thespreadsheet.csv

How To Increase PHP File Upload Limit on CentOS 7

How To Increase PHP File Upload Limit on CentOS 7 with one line of bash.

SSH into your server as root and execute the following command:

replace "upload_max_filesize = 2M" "upload_max_filesize = 20M" -- /etc/php.ini && service httpd restart

That will replace your 2mb upload limit with a 20mb upload limit and it will restart the web server so changes to php.ini are made:


P.S. you can verify your new maximum PHP file upload size is by executing:

grep upload_max_filesize /etc/php.ini

Sample output:

upload_max_filesize = 20M

Universal way to increase PHP Upload Limit:

SSH into your server as root. Use vi or nano to edit the php.ini file:

vi /etc/php.ini

Press / and type upload_max
(Pressing backslash (/) allows you to search a file while editing with Vi)

You should see:

upload_max_filesize = 2M

Press i and change that value to 20M
(Pressing “i” allows you to insert type in characters while editing with Vi)

upload_max_filesize = 20M

To exit Vi, press Esc and type


and hit enter.

Now either


your server or restart httpd:

service httpd restart

Your PHP upload limit is now 20mb.

Brightness Keys Not Working Debian: Xfce Function F5 & F6 Fix

All the other Fn + F1 thru F12 keys were working except for Fn + F5 & Fn + F6.

Open keyboard settings and find Application Shortcuts.

Add a new shortcut with the following command:

Reduce brightness by 10%:

xbacklight -10

I used the keyboard shortcode Alt + (-), meaning the minus key on my numpad.

Increase brightness by 10%:

xbacklight +10

I used the keyboard shortcode Alt + (+), meaning the plus key on my numpad.

My laptop keyboard has a number pad so this is pretty comfortable, but if you don’t have a numpad, you’ll need to choose a different unused combination.

WARNING: Don’t try and set the keyboard as Alt F4 and Alt F5 because are already bound to “close the window”…

My Hotkey & Keyboard Shortcut Setup Linux




Left Windows Key

Opens Application Finder so you can type in the first few letters of any application and hit enter.




Crtl + Alt + G

Super fast calculator opening



Crtl + Alt + Y

Open a new text file

To be continued…

WiFi Network Not Showing Up Linux: Personal Hotspot Not Listed Debian/Ubuntu

I was using a small MiFi router for a while and when I would come back inside, more often than not the network would not be found again even though I was sitting right next to my computer.

The same would happen with iPhone Hostpot Wifi not showing up even though it was right next to me. If the WiFi disconnects and can’t be found again for a few minutes, the fastest way to jump start the WiFi network list is below.

A solution to hard reset the WiFi network list on Debian, Ubuntu, Mint or other distros is as follows:

sudo service network-manager restart

This command will restart network manager and force search for nearby WiFi networks.

However, instead of typing this in each time I came back inside or turned on iPhone personal hotspot, I made a launcher icon that would hard refresh the list of available networks and in turn, be able to connect to my WiFi again.

Go to the desktop, right click and create a new launcher.

Name the launcher WiFi Restart and put the command the same as the command above.

WiFi Network Manager Reset Xfce Debian Ubuntu

Save this launcher, and then drag it onto your launcher area.

Now, when your WiFi disconencts or your personal hotspot isn’t being found, just press the WiFi restart button and your network will show up again in a matter of seconds.

The icon I use is network-wireless-offline-symbolic in Status Icons.

WiFi disconnects and can't be found again icon