$field ) { $type = isset( $types[ $name ] ) ? $types[ $name ] : 'text'; $values[ $name ] = null !== $sanitize ? call_user_func( $sanitize, $field['value'], $type ) : $field['value']; } $fields = array_values( $canonical ); // A hidden-type field's value is fixed by the form, so rules read the // saved value: a client can't blank or change it to flip visibility. $constraints = isset( $definition['constraints'] ) ? (array) $definition['constraints'] : array(); foreach ( $types as $name => $type ) { if ( 'hidden' === $type && isset( $constraints[ $name ][0] ) ) { $values[ $name ] = (string) $constraints[ $name ][0]; } } $hidden = array_flip( array_diff( $conditions['fields'], Form_Conditions::visible_fields( $conditions['fields'], $conditions['conditions'], $values ) ) ); if ( empty( $hidden ) ) { return array( $fields, $required ); } $is_hidden = function ( $name ) use ( $hidden, $types ) { if ( isset( $types[ $name ] ) && 'country_code' === $types[ $name ] ) { $name = substr( $name, 0, -strlen( '_country_code' ) ); } return isset( $hidden[ $name ] ); }; $kept = array(); foreach ( $fields as $field ) { $name = sanitize_text_field( $field['name'] ); if ( '' === $name || ! $is_hidden( $name ) ) { $kept[] = $field; } } return array( $kept, array_values( array_filter( $required, function ( $name ) use ( $is_hidden ) { return ! $is_hidden( $name ); } ) ), ); } }