WPML
Статус
Решено автором
Решено в
Bricks 2.3
Связанный плагин/тема
Bricks Theme

Обзор проблемы

При использовании Bricks с WPML Вы можете столкнуться с проблемой, при которой открытие редактора Bricks для языка по умолчанию перенаправляет на неверный URL с дополнительным каталогом языка, что приводит к ошибке 404. Это может произойти, если в WPML выбрана настройка Использовать каталог для языка по умолчанию.

Обходное решение

Обходное решение 1


Простое исправление (без кода)

  • Перейдите в Bricks > Настройки > Builder

  • Установите для языка Builder значение «Site Default» и сохраните

Обходное решение 2


Пожалуйста, перед продолжением убедитесь, что у Вас есть полная резервная копия Вашего сайта.

  • Добавьте следующий код в файл functions.php Вашей темы оформления.
    add_action( 'after_setup_theme', function () {
    	if ( ! defined( 'ICL_SITEPRESS_VERSION' ) || ! class_exists( 'BricksTheme' ) ) {
    		return;
    	}
    
    	$bricks = BricksTheme::instance();
    
    	// 1. Prevent Bricks from switching language
    	if ( ! empty( $bricks->wpml ) ) {
    		remove_action( 'bricks/builder/switch_locale', [ $bricks->wpml, 'switch_builder_languge' ] );
    	}
    
    	// 2. Instead switch UI locale
    	add_action( 'bricks/builder/switch_locale', function ( $locale ) {
    		if ( empty( $locale ) || empty( $_GET['bricks'] ) || $_GET['bricks'] !== 'run' ) {
    			return;
    		}
    
    		// prevent memory exhausion I got on my sandbox
    		static $lock = false;
    		if ( $lock ) {
    			return;
    		}
    		$lock = true;
    
    		try {
    			// Switch UI locale
    			switch_to_locale( $locale );
    			// Reload Bricks theme textdomain 
    			unload_textdomain( 'bricks' );
    			load_theme_textdomain( 'bricks', get_template_directory() . '/languages' );
    		} finally {
    			$lock = false;
    		}
    
    	}, 5, 1 );
    
    }, 20 );
            

Все известные проблемы →