- Статус
- Открыто
- Заявлено для
- Advanced Custom Fields Multilingual 2.1.5
- Связанный плагин/тема
- Advanced Custom Fields (ACF)
- Теги темы
- Compatibility
Обзор проблемы
При использовании Advanced Custom Fields (ACF) с WPML Вы можете столкнуться с некорректной работой условной логики на дополнительных языках. Это происходит, когда условная логика зависит от полей, использующих ссылки на объекты или термины, таких как поля таксономии или объектов записи.
Обходное решение
Пожалуйста, перед продолжением убедитесь, что у Вас есть полная резервная копия сайта.
- Добавьте следующий код в файл functions.php Вашей темы оформления.
/** * WPML Workaround for compsupp-wpmltriage-3649 */ add_action( 'init', function() { if ( defined( 'ICL_SITEPRESS_VERSION' ) ) { add_filter( 'acf/load_field', function ( $field ) { if ( empty( $field['conditional_logic'] ) || ! is_array( $field['conditional_logic'] ) ) { return $field; } foreach ( $field['conditional_logic'] as $group_index => $rules ) { if ( ! is_array( $rules ) ) { continue; } foreach ( $rules as $rule_index => $rule ) { if ( isset( $rule['field'], $rule['value'] ) && is_numeric( $rule['value'] ) ) { // Fetch the parent field $parent_field = acf_get_field( $rule['field'] ); if ( ! isset( $parent_field['type'] ) ) { continue; } if ( $parent_field['type'] === 'taxonomy' ) { $rule['value'] = apply_filters( 'wpml_object_id', $rule['value'], $parent_field['taxonomy'], true ); } elseif ( $parent_field['type'] === 'post_object' ) { $post_types = $parent_field['post_type'] ?? ''; // can be multiple if ( is_array( $post_types ) ) { foreach ( $post_types as $post_type ) { $translated_id = apply_filters( 'wpml_object_id', $rule['value'], $post_type, true ); if ( $translated_id && $translated_id !== $rule['value'] ) { $rule['value'] = $translated_id; break; } } } else { $rule['value'] = apply_filters( 'wpml_object_id', $rule['value'], $post_types, true ); } } $field['conditional_logic'][ $group_index ][ $rule_index ] = $rule; } } } return $field; }, 100 ); } } );