- 状态
- 未解决
- 报告针对
- 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 ); } } );