WPML
ステータス
開発者により解決済み
関連するプラグイン/テーマ
Hestia Pro
トピックタグ
Compatibility

問題の概要

Hestia Proテーマを使用している場合、レイアウトの翻訳が利用可能であるかどうかにかかわらず、外観 > カスタムレイアウトで作成したカスタムフッターレイアウトがデフォルト言語でのみ表示される問題が発生する場合があります。

回避策

続行する前に、サイトの完全なバックアップを取得していることを確認してください。


  • …/wp-content/themes/hestia-pro/inc/addons/modules/custom_layouts/class-hestia-custom-layouts-module.phpファイルを開きます。

  • 210行目を探します。

  • 次のコードを:
    	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;
    	}

  • 次のように変更します:
    	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;
    	}
  • その後、トランジェントを削除します。

すべての既知の問題 →