diff --git a/entityreference_filter.views.inc b/entityreference_filter.views.inc index d93529bb76ea84b406a23b071524c227e3fd387d..22590beeabe0beb5c73bbd16b200e98c15940b2c 100644 --- a/entityreference_filter.views.inc +++ b/entityreference_filter.views.inc @@ -12,7 +12,6 @@ use Drupal\field\Entity\FieldStorageConfig; * Implements hook_views_data_alter(). */ function entityreference_filter_views_data_alter(array &$data) { - // Apply to entity reference fields, nid, uid, tid, gid and commerce // variations. foreach ($data as $table_name => $table_info) { @@ -42,13 +41,21 @@ function entityreference_filter_views_data_alter(array &$data) { $target_entity_type = 'commerce_product'; } } - // Other entityreference fields. - elseif (!empty($field_info['filter']['field_name']) && !empty($field_info['filter']['entity_type']) && mb_substr($field_name, -10) === '_target_id') { - $entity_type = $field_info['filter']['entity_type']; - $entity_field_name = $field_info['filter']['field_name']; - $field_storage_config = FieldStorageConfig::loadByName($entity_type, $entity_field_name); - if (!is_null($field_storage_config)) { - $target_entity_type = $field_storage_config->getSetting('target_type'); + + // Check for other entity reference fields. + // This check is separate from the previous conditions to handle cases + // where an outer condition is met but not an inner one. + // For example, when dealing with entity reference fields on commerce + // products that don't match the specific inner commerce + // product\variations conditions above. + if (!$target_entity_type) { + if (!empty($field_info['filter']['field_name']) && !empty($field_info['filter']['entity_type']) && mb_substr($field_name, -10) === '_target_id') { + $entity_type = $field_info['filter']['entity_type']; + $entity_field_name = $field_info['filter']['field_name']; + $field_storage_config = FieldStorageConfig::loadByName($entity_type, $entity_field_name); + if (!is_null($field_storage_config)) { + $target_entity_type = $field_storage_config->getSetting('target_type'); + } } }