Last active
April 15, 2025 17:04
-
-
Save JoryHogeveen/1a9f41406f2e1f1b542d725a1954f774 to your computer and use it in GitHub Desktop.
WP MU Plugin: Polylang multidomain Elementor assets URL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* MU plugin. Need to be used together with regular plugin. | |
* | |
* Plugin Name: Polylang Elementor Cross Domain Assets URL | |
* Description: Fixes cross origin domain issues with Elementor and Polylang | |
* Version: 1.0 | |
* Author: Jory Hogeveen | |
* Author URI: http://www.keraweb.nl/ | |
*/ | |
add_filter( 'plugins_url', function ( $url ) { | |
if ( false === strpos( $url, 'elementor' ) ) { | |
return $url; | |
} | |
$pll_options = get_option( 'polylang' ); | |
if ( ! isset( $pll_options['domains'] ) ) { | |
// Not a multidomain configuration. | |
return $url; | |
} | |
$domains = $pll_options['domains']; | |
$host = $_SERVER['HTTP_HOST']; | |
foreach ( $domains as $domain ) { | |
if ( false !== strpos( $domain, $host ) ) { | |
$url_parts = parse_url( $url ); | |
$url = str_replace( $url_parts['host'], $host, $url ); | |
break; | |
} | |
} | |
return $url; | |
} ); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
* Non-MU plugin. Need to be used together with MU plugin. | |
* | |
* Based on code from @nicmare: https://github.com/polylang/polylang/issues/590#issuecomment-721782112 | |
* | |
* Plugin Name: Polylang Elementor Cross Domain Assets | |
* Description: Fixes cross origin domain issues with Elementor and Polylang | |
* Version: 1.0 | |
* Author: Jory Hogeveen | |
* Author URI: http://www.keraweb.nl/ | |
*/ | |
Polylang_Elementor_Assets::get_instance(); | |
class Polylang_Elementor_Assets | |
{ | |
private static $_instance = null; | |
protected $current_domain = ''; | |
protected $default_domain = ''; | |
protected $current_language = ''; | |
protected $default_language = ''; | |
protected $all_domains = array(); | |
protected function __construct() { | |
add_action( 'init', array( $this, 'init' ) ); | |
} | |
public function init() { | |
if ( ! function_exists( 'pll_current_language' ) ) { | |
return; | |
} | |
$return = OBJECT; | |
$current_language = pll_current_language( $return ); | |
$default_language = pll_default_language( $return ); | |
if ( ! $current_language || ! $default_language ) { | |
return; | |
} | |
$is_preview = isset( $_GET['elementor_preview'] ); | |
$is_editor = ( isset( $_GET['action'] ) && 'elementor' === $_GET['action'] ); | |
if ( ! $is_editor && ! $is_preview ) { | |
return; | |
} | |
$languages = pll_the_languages( array( 'raw' => true ) ); | |
foreach ( $languages as $language ) { | |
$this->all_domains[] = $language['url']; | |
if ( false !== stripos( $language['url'], $_SERVER['SERVER_NAME'] ) ) { | |
$current_language = PLL()->model->get_language( $language['slug'] ); | |
break; | |
} | |
} | |
$this->current_domain = $current_language->home_url; | |
$this->default_domain = $default_language->home_url; | |
$this->current_language = $current_language->slug; | |
$this->default_language = $default_language->slug; | |
add_filter( 'script_loader_src', array( $this, 'translate_url' ) ); | |
add_filter( 'style_loader_src', array( $this, 'translate_url' ) ); | |
add_filter( 'allowed_http_origins', array( $this, 'add_allowed_origins' ) ); | |
add_filter( 'wp_get_attachment_image_attributes', array( $this, 'check_for_src' ),10,2 ); | |
add_filter( 'admin_url', array( $this, 'modify_adminy_url_for_ajax' ), 10, 3 ); | |
add_filter( 'post_row_actions', array( $this, 'elementor_links_fix' ), 12, 2 ); | |
add_filter( 'page_row_actions', array( $this, 'elementor_links_fix' ), 12, 2 ); | |
add_filter( 'elementor/editor/localize_settings', array( $this, 'translate_url_recursive' ) ); | |
} | |
public function translate_url( $url ) { | |
return str_replace( $this->default_domain, $this->current_domain, $url ); | |
} | |
public function translate_url_recursive( $data ) { | |
if ( is_string( $data ) ) { | |
$data = $this->translate_url( $data ); | |
} elseif ( is_array( $data ) ) { | |
$data = array_map( array( $this, 'translate_url_recursive' ), $data ); | |
} | |
return $data; | |
} | |
public function add_allowed_origins( $origins ) { | |
$origins[] = $this->current_domain; | |
$origins = array_merge( $origins, $this->all_domains ); | |
return $origins; | |
} | |
public function modify_adminy_url_for_ajax( $url, $path, $blog_id ) { | |
if ( 'admin-ajax.php' == $path ) { | |
return $this->translate_url( $url ); | |
} | |
return $url; | |
} | |
public function check_for_src($attr, $attachment) { | |
$attr['src'] = $this->translate_url( $attr['src'] ); | |
$attr['srcset'] = $this->translate_url( $attr['srcset'] ); | |
return $attr; | |
} | |
// change the edit and elementor-edit links in post table | |
public function elementor_links_fix( $actions, $post ) { | |
if(empty($actions['edit_with_elementor'])) return $actions; | |
if(!function_exists("pll_get_post_language")) return $actions; | |
if ( pll_get_post_language( $post->ID ) != pll_default_language() ) { | |
$actions['edit'] = $this->translate_url( $actions['edit'] ); | |
$actions['edit_with_elementor'] = $this->translate_url( $actions['edit_with_elementor'] ); | |
} | |
return $actions; | |
} | |
public static function get_instance() { | |
if ( ! self::$_instance ) { | |
self::$_instance = new self(); | |
} | |
return self::$_instance; | |
} | |
} |
Hi @JoryHogeveen,
finalement ça marche avec le plugin Connect Polylang for Elementor. Je l'avais déjà testé, mais j'ai compris aujourd'hui qu'il fallait supprimer WPS Hide Login qui bloquait l'identification sur la 2e langue.
Merci d'avoir pris le temps de me répondre 😊
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi @emmasatti
Sorry but I have no idea why it wouldn't work for you without debugging your environment.
This code is provided freely but I cannot guarantee it will work for all installations.