Skip to content Skip to sidebar

Resolved by author

Topic Tags: Compatibility

Overview of the issue

If you are using Hestia Pro theme, you may experience an issue where the custom Footer layout created in Appearance > Custom layouts is displayed only in the default language, regardless of the translations available for the layout.

Workaround

Please, make sure of having a full backup of your site before proceeding.

  • Open …/wp-content/themes/hestia-pro/inc/addons/modules/custom_layouts/class-hestia-custom-layouts-module.php file.
  • Look for line 210.
  • Change:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    private function map_custom_layouts() {
        if ( $this->is_builder_preview() ) {
            return true;
        }
        $cache = get_transient( 'custom_layouts_posts_map' );
        if ( ! empty( $cache ) ) {
            self::$post_map = $cache;
     
            return true;
        }
        $query = new WP_Query(
            array(
                'post_type'              => 'hestia_layouts',
                'posts_per_page'         => 100,
                'no_found_rows'          => true,
                'update_post_meta_cache' => false,
                'update_post_term_cache' => false,
                'fields'                 => 'ids',
                'post_status'            => 'publish',
            )
        );
        if ( ! $query->have_posts() ) {
            return false;
        }
        foreach ( $query->posts as $pid ) {
            $layout   = get_post_meta( $pid, 'custom-layout-options-layout', true );
            $priority = get_post_meta( $pid, 'custom-layout-options-priority', true );
            if ( $layout === 'hooks' ) {
                $layout = get_post_meta( $pid, 'custom-layout-options-hook', true );
            }
            self::$post_map[ $layout ][ $pid ] = $priority;
        }
        set_transient( 'custom_layouts_posts_map', self::$post_map, DAY_IN_SECONDS );
     
        return true;
    }
  • With:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    private function map_custom_layouts() {
        if ( $this->is_builder_preview() ) {
            return true;
        }
     
        // Get the current language code
        $current_language = apply_filters('wpml_current_language', NULL); // Fallback to WPML's current language
     
        // Modify the transient key to include the current language
        $wpml_transient_key = 'custom_layouts_posts_map_' . $current_language;
     
        $cache = get_transient( $wpml_transient_key );
        if ( ! empty( $cache ) ) {
            self::$post_map = $cache;
     
            return true;
        }
        $query = new WP_Query(
            array(
                'post_type'              => 'hestia_layouts',
                'posts_per_page'         => 100,
                'no_found_rows'          => true,
                'update_post_meta_cache' => false,
                'update_post_term_cache' => false,
                'fields'                 => 'ids',
                'post_status'            => 'publish',
            )
        );
        if ( ! $query->have_posts() ) {
            return false;
        }
        foreach ( $query->posts as $pid ) {
            $layout   = get_post_meta( $pid, 'custom-layout-options-layout', true );
            $priority = get_post_meta( $pid, 'custom-layout-options-priority', true );
            if ( $layout === 'hooks' ) {
                $layout = get_post_meta( $pid, 'custom-layout-options-hook', true );
            }
            self::$post_map[ $layout ][ $pid ] = $priority;
        }
        set_transient( $wpml_transient_key, self::$post_map, DAY_IN_SECONDS );     
     
        return true;
    }
  • After that, delete your transients.