I have a slightly different solution. Hope this helps too...
- You can have as many taxonomy categories as you need as exposed filters.
- Each vocabulary may have different pathauto patterns.
- Other exposed filters should still work without any conflict.
Place this code in your custom module (CUSTOMMODULE.module):
/**
* Implements hook_form_FORM_ID_alter().
*/
function CUSTOMMODULE_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
// Replace `Size` filter.
CUSTOMMODULE_jumpmenu($form, 'field_size_tid');
// Replace `Color` filter.
CUSTOMMODULE_jumpmenu($form, 'field_color_tid');
}
/**
* Transform select filters into a simple jump menu.
*
* @param $form
* Nested array of form elements that comprise the form.
* @param $field_name
* String representing the name of the field to be replaced.
*/
function CUSTOMMODULE_jumpmenu(&$form, $field_name) {
if (
isset($form[$field_name])
&& ($form[$field_name]['#type'] === 'select')
&& !empty($form[$field_name]['#options'])
) {
$options = &$form[$field_name]['#options'];
foreach ($options as $tid => $value) {
if (is_int($tid)) {
$path = drupal_get_path_alias('taxonomy/term/' . $tid);
$options[url($path)] = $value;
unset($options[$tid]);
}
}
$form[$field_name]['#attributes']['onChange'] = 'javascript:if (this.value !== "All") { location.href = this.value; return false; }';
return $form;
}
return [];
}
You can test this solution with this simple view:
$view = new view();
$view->name = 'example_view';
$view->description = '';
$view->tag = 'drupal_stackexchange';
$view->base_table = 'node';
$view->human_name = 'Example view';
$view->core = 7;
$view->api_version = '3.0';
$view->disabled = FALSE;
/* Display: Master */
$handler = $view->new_display('default', 'Master', 'default');
$handler->display->display_options['title'] = 'Example view';
$handler->display->display_options['use_more_always'] = FALSE;
$handler->display->display_options['access']['type'] = 'perm';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '50';
$handler->display->display_options['style_plugin'] = 'table';
$handler->display->display_options['style_options']['columns'] = array(
'title' => 'title',
'field_color' => 'field_color',
'field_size' => 'field_size',
);
$handler->display->display_options['style_options']['default'] = '-1';
$handler->display->display_options['style_options']['info'] = array(
'title' => array(
'sortable' => 0,
'default_sort_order' => 'asc',
'align' => '',
'separator' => '',
'empty_column' => 0,
),
'field_color' => array(
'sortable' => 0,
'default_sort_order' => 'asc',
'align' => '',
'separator' => '',
'empty_column' => 0,
),
'field_size' => array(
'sortable' => 0,
'default_sort_order' => 'asc',
'align' => '',
'separator' => '',
'empty_column' => 0,
),
);
/* Field: Content: Title */
$handler->display->display_options['fields']['title']['id'] = 'title';
$handler->display->display_options['fields']['title']['table'] = 'node';
$handler->display->display_options['fields']['title']['field'] = 'title';
$handler->display->display_options['fields']['title']['alter']['word_boundary'] = FALSE;
$handler->display->display_options['fields']['title']['alter']['ellipsis'] = FALSE;
/* Field: Content: Color */
$handler->display->display_options['fields']['field_color']['id'] = 'field_color';
$handler->display->display_options['fields']['field_color']['table'] = 'field_data_field_color';
$handler->display->display_options['fields']['field_color']['field'] = 'field_color';
/* Field: Content: Size */
$handler->display->display_options['fields']['field_size']['id'] = 'field_size';
$handler->display->display_options['fields']['field_size']['table'] = 'field_data_field_size';
$handler->display->display_options['fields']['field_size']['field'] = 'field_size';
/* Sort criterion: Content: Title */
$handler->display->display_options['sorts']['title']['id'] = 'title';
$handler->display->display_options['sorts']['title']['table'] = 'node';
$handler->display->display_options['sorts']['title']['field'] = 'title';
/* Filter criterion: Content: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = 1;
$handler->display->display_options['filters']['status']['group'] = 1;
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter criterion: Content: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
'tshirt' => 'tshirt',
);
/* Filter criterion: Content: Size (field_size) */
$handler->display->display_options['filters']['field_size_tid']['id'] = 'field_size_tid';
$handler->display->display_options['filters']['field_size_tid']['table'] = 'field_data_field_size';
$handler->display->display_options['filters']['field_size_tid']['field'] = 'field_size_tid';
$handler->display->display_options['filters']['field_size_tid']['exposed'] = TRUE;
$handler->display->display_options['filters']['field_size_tid']['expose']['operator_id'] = 'field_size_tid_op';
$handler->display->display_options['filters']['field_size_tid']['expose']['label'] = 'Size';
$handler->display->display_options['filters']['field_size_tid']['expose']['operator'] = 'field_size_tid_op';
$handler->display->display_options['filters']['field_size_tid']['expose']['identifier'] = 'field_size_tid';
$handler->display->display_options['filters']['field_size_tid']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
);
$handler->display->display_options['filters']['field_size_tid']['type'] = 'select';
$handler->display->display_options['filters']['field_size_tid']['vocabulary'] = 'size';
/* Filter criterion: Content: Color (field_color) */
$handler->display->display_options['filters']['field_color_tid']['id'] = 'field_color_tid';
$handler->display->display_options['filters']['field_color_tid']['table'] = 'field_data_field_color';
$handler->display->display_options['filters']['field_color_tid']['field'] = 'field_color_tid';
$handler->display->display_options['filters']['field_color_tid']['exposed'] = TRUE;
$handler->display->display_options['filters']['field_color_tid']['expose']['operator_id'] = 'field_color_tid_op';
$handler->display->display_options['filters']['field_color_tid']['expose']['label'] = 'Color';
$handler->display->display_options['filters']['field_color_tid']['expose']['operator'] = 'field_color_tid_op';
$handler->display->display_options['filters']['field_color_tid']['expose']['identifier'] = 'field_color_tid';
$handler->display->display_options['filters']['field_color_tid']['expose']['remember_roles'] = array(
2 => '2',
1 => 0,
3 => 0,
);
$handler->display->display_options['filters']['field_color_tid']['type'] = 'select';
$handler->display->display_options['filters']['field_color_tid']['vocabulary'] = 'color';
/* Display: Page */
$handler = $view->new_display('page', 'Page', 'page');
$handler->display->display_options['path'] = 'example-view';
$handler->display->display_options['menu']['type'] = 'normal';
$handler->display->display_options['menu']['title'] = 'Example view';
$handler->display->display_options['menu']['name'] = 'main-menu';
But in fact the ?field_color_tid=2 = /color/green
is confusing. Do you want to say it looks like that in URL? – AltaGrade Mar 22 '18 at 15:36