WPML
ステータス
解決済み
報告対象
WPML Multilingual CMS 4.6.13
解決されたバージョン
WPML Multilingual CMS 4.7.4
関連するプラグイン/テーマ
Elementor
トピックタグ
Compatibility

問題の概要

ウィジェットの表示を制御するためにElementor Proの表示条件機能を使用すると、翻訳されたページで条件が正しく適用されません。具体的には、翻訳された言語のタグカテゴリーが期待通りに表示条件をトリガーせず、非表示になるべき要素が表示されたままになります。

回避策

続行する前に、必ずサイトの完全なバックアップを作成してください。


  • テーマのfunctions.phpファイルを開きます。

  • 次のスニペットを追加します。
    /*
    * WPML Workaround for compsupp-7656
    */
    add_filter( 'elementor/frontend/before_render', 'wpml_compsupp7656_filter_e_display_conditions_from_widget');
    
    function wpml_compsupp7656_filter_e_display_conditions_from_widget($element) {
        $settings = $element->get_settings();
    
        if (array_key_exists('e_display_conditions', $settings) && !empty($settings['e_display_conditions'])) {
            foreach ($settings['e_display_conditions'] as $key => $condition_json) {
                $condition = json_decode($condition_json, true);
                
                foreach ($condition as &$condition_group) {
                    foreach ($condition_group as &$single_condition) {    
                        if (isset($single_condition['condition']) && strpos($single_condition['condition'], 'in_') === 0) {
                            $taxonomy_key = substr($single_condition['condition'], 3); // Remove 'in_' prefix
                            if (isset($single_condition[$taxonomy_key])) {
                                foreach ($single_condition[$taxonomy_key] as &$term) {
                                    if (isset($term['id'])) {
                                        $term_obj = get_term($term['id']);
                                        if ($term_obj && !is_wp_error($term_obj)) {
                                            $term['id'] = apply_filters('wpml_object_id', $term['id'], $term_obj->taxonomy, true);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
    
                // Encode the modified condition back to JSON
                $settings['e_display_conditions'][$key] = json_encode($condition);
            }
    
            // Update the element's settings with the modified conditions
            $element->set_settings('e_display_conditions', $settings['e_display_conditions']);
        }
    }

すべての既知の問題 →