WPML fix error 500 – Breve guida su come fixare l’errore 500 dato da WPML in alcune situazioni
Interfacciandomi con il multilingua di WordPress mi è capitato più volte di dover usare plugin come WPML (al momento è il miglior plugin per avere il multilingua su WordPress).
Su alcuni siti però mi è capitato che il frontend andasse in errore 500. Questa cosa è dovuta da alcuni plugin che richiedono il flush delle rewrite rules – flush_rewrite_rules(true) – e quindi la riscrittura del file htaccess.
Per risolvere questo problema ho trovato un link sul sito ufficiale di WPML che spiega come risolvere il fastidioso problema del RewriteBase
https://wpml.org/errata/htaccess-is-rewritten-with-language-folder
Però in situazioni in cui ci sono plugin esterni di cache o di hiding, come ad esempio Hide My WP può succedere che quelle regole non bastano, perciò dovremo aggiungere al nostro file function.php del tema o al nostro plugin personalizzato questo piccolo filtro
add_filter('mod_rewrite_rules', 'fix_rewritebase'); function fix_rewritebase($rules){ $home_root = parse_url(home_url()); if ( isset( $home_root['path'] ) ) { $home_root = trailingslashit($home_root['path']); } else { $home_root = '/'; } $wpml_root = parse_url(get_option('home')); if ( isset( $wpml_root['path'] ) ) { $wpml_root = trailingslashit($wpml_root['path']); } else { $wpml_root = '/'; } $rules = str_replace("RewriteBase $home_root", "RewriteBase $wpml_root", $rules); $rules = str_replace("RewriteRule . $home_root", "RewriteRule . $wpml_root", $rules); $rules = str_replace($home_root."wp-includes/", "/wp-includes/", $rules); $rules = str_replace($home_root."wp-content/", "/wp-content/", $rules); $rules = str_replace($home_root."wp-admin/", "/wp-admin/", $rules); $rules = str_replace($home_root."nothing_404_404", "/nothing_404_404", $rules); $rules = str_replace($home_root."/index.php?", "/index.php?", $rules); return $rules; }