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

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

В теме оформления Bricks, если условие шаблона настроено на отображение только для определенных элементов таксономии (например, конкретной рубрики), это условие некорректно применяется в переведенных шаблонах.

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

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

Часть I


  • Перейдите в WPML > Настройки > Произвольные поля.

  • Найдите поле _bricks_template_settings.

  • Установите для него значение «Копировать»

Часть II


  • Откройте файл functions.php Вашей темы оформления.

  • Добавьте следующий код:
    /**
     * WPML Workaround for compsupp-7667
     */
    add_filter('get_post_metadata', 'wpml_compsupp7667_bricks_translate_template_conditions', 10, 4);
    function wpml_compsupp7667_bricks_translate_template_conditions($value, $post_id, $key, $single) {
        if ($key !== '_bricks_template_settings') {
            return $value;
        }
    
        // Remove filter temporarily to avoid infinite loop
        remove_filter('get_post_metadata', 'wpml_compsupp7667_bricks_translate_template_conditions', 10);
        
        // Get all meta values
        $raw_values = get_post_meta($post_id, $key, false);
        
        // Add filter back
        add_filter('get_post_metadata', 'wpml_compsupp7667_bricks_translate_template_conditions', 10, 4);
    
        // If we have no values, return the original
        if (empty($raw_values)) {
            return $value;
        }
    
        // Process the array structure
        foreach ($raw_values as &$settings) {
            if (is_array($settings) && isset($settings['templateConditions'])) {
                foreach ($settings['templateConditions'] as &$condition) {
                    if (!empty($condition['archiveTerms']) && is_array($condition['archiveTerms'])) {
                        foreach ($condition['archiveTerms'] as &$termString) {
                            if (strpos($termString, '::') !== false) {
                                list($taxonomy, $termId) = explode('::', $termString);
                                $translatedId = apply_filters('wpml_object_id', intval($termId), $taxonomy, true);
                                if ($translatedId) {
                                    $termString = $taxonomy . '::' . $translatedId;
                                }
                            }
                        }
                    }
                }
            }
        }
    
        return $raw_values;
    }

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