diff --git a/src/Form/FacetForm.php b/src/Form/FacetForm.php
index 9cc55a2..c1be783 100644
--- a/src/Form/FacetForm.php
+++ b/src/Form/FacetForm.php
@@ -129,6 +129,14 @@ public function form(array $form, FormStateInterface $form_state) {
     foreach ($this->widgetPluginManager->getDefinitions() as $widget_id => $definition) {
       $widget_options[$widget_id] = !empty($definition['label']) ? $definition['label'] : $widget_id;
     }
+
+    // Filters all the available widgets to make sure that only those that
+    // this facet applies for are enabled.
+    $widget_options = array_filter($widget_options, function ($widget_id) use ($facet) {
+      $widget = $this->widgetPluginManager->createInstance($widget_id);
+      return $widget->supportsFacet($facet);
+    }, ARRAY_FILTER_USE_KEY);
+
     $form['widget'] = [
       '#type' => 'radios',
       '#title' => $this->t('Widget'),
@@ -178,10 +186,20 @@ public function form(array $form, FormStateInterface $form_state) {
     }
     $enabled_processors = $facet->getProcessors(TRUE);
 
+    // Filters all the available processors to make sure that only those that
+    // this facet applies for are enabled.
+    $all_processors = array_filter($all_processors, function ($id) use ($facet) {
+      $processor = $this->processorPluginManager->createInstance($id, ['facet' => $facet]);
+      return $processor->supportsFacet($facet);
+    }, ARRAY_FILTER_USE_KEY);
+
     $stages = $this->processorPluginManager->getProcessingStages();
     $processors_by_stage = [];
     foreach ($stages as $stage => $definition) {
-      $processors_by_stage[$stage] = $facet->getProcessorsByStage($stage, FALSE);
+      $processors_by_stage[$stage] = array_filter($facet->getProcessorsByStage($stage, FALSE), function ($id) use ($facet) {
+        $processor = $this->processorPluginManager->createInstance($id, ['facet' => $facet]);
+        return $processor->supportsFacet($facet);
+      }, ARRAY_FILTER_USE_KEY);
     }
 
     $form['#tree'] = TRUE;
diff --git a/src/Processor/ProcessorInterface.php b/src/Processor/ProcessorInterface.php
index 778fb80..bd6f65a 100644
--- a/src/Processor/ProcessorInterface.php
+++ b/src/Processor/ProcessorInterface.php
@@ -111,4 +111,19 @@ public function isHidden();
    */
   public function getDescription();
 
+  /**
+   * Checks if the facet is supported by this widget.
+   *
+   * Reasons why this would be unsupported can be chosen by the widget.
+   *
+   * @param \Drupal\facets\FacetInterface $facet
+   *   The facet to check for.
+   *
+   * @return bool
+   *   Returns true when allowed, false otherwise.
+   *
+   * @see \Drupal\facets\Widget\WidgetPluginInterface::supportsFacet
+   */
+  public function supportsFacet(FacetInterface $facet);
+
 }
diff --git a/src/Processor/ProcessorPluginBase.php b/src/Processor/ProcessorPluginBase.php
index 7f832c3..8ed6de4 100644
--- a/src/Processor/ProcessorPluginBase.php
+++ b/src/Processor/ProcessorPluginBase.php
@@ -107,4 +107,11 @@ public function calculateDependencies() {
     return $this->dependencies;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function supportsFacet(FacetInterface $facet) {
+    return TRUE;
+  }
+
 }
diff --git a/src/Widget/WidgetPluginBase.php b/src/Widget/WidgetPluginBase.php
index bc5fbc6..b035750 100644
--- a/src/Widget/WidgetPluginBase.php
+++ b/src/Widget/WidgetPluginBase.php
@@ -245,4 +245,11 @@ public function isPropertyRequired($name, $type) {
     return FALSE;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function supportsFacet(FacetInterface $facet) {
+    return TRUE;
+  }
+
 }
diff --git a/src/Widget/WidgetPluginInterface.php b/src/Widget/WidgetPluginInterface.php
index 68dd9a1..cd90d4a 100644
--- a/src/Widget/WidgetPluginInterface.php
+++ b/src/Widget/WidgetPluginInterface.php
@@ -51,6 +51,21 @@ public function getQueryType(array $query_types);
    */
   public function isPropertyRequired($name, $type);
 
+  /**
+   * Checks if the facet is supported by this processor.
+   *
+   * Reasons why this would be unsupported can be chosen by the processor.
+   *
+   * @param \Drupal\facets\FacetInterface $facet
+   *   The facet to check for.
+   *
+   * @return bool
+   *   Returns true when allowed, false otherwise.
+   *
+   * @see \Drupal\facets\Processor\ProcessorInterface::supportsFacet
+   */
+  public function supportsFacet(FacetInterface $facet);
+
   /**
    * Provides a configuration form for this widget.
    *
diff --git a/tests/facets_custom_widget/src/Plugin/facets/processor/TestPreQuery.php b/tests/facets_custom_widget/src/Plugin/facets/processor/TestPreQuery.php
index 363af25..9b9f1da 100644
--- a/tests/facets_custom_widget/src/Plugin/facets/processor/TestPreQuery.php
+++ b/tests/facets_custom_widget/src/Plugin/facets/processor/TestPreQuery.php
@@ -39,4 +39,11 @@ public function preQuery(FacetInterface $facet) {
     drupal_set_message($this->getConfiguration()['test_value']);
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function supportsFacet(FacetInterface $facet) {
+    return \Drupal::state()->get('facets_test_supports_facet', TRUE);
+  }
+
 }
diff --git a/tests/facets_custom_widget/src/Plugin/facets/widget/CustomWidget.php b/tests/facets_custom_widget/src/Plugin/facets/widget/CustomWidget.php
index 9e67dd5..9b7186f 100644
--- a/tests/facets_custom_widget/src/Plugin/facets/widget/CustomWidget.php
+++ b/tests/facets_custom_widget/src/Plugin/facets/widget/CustomWidget.php
@@ -2,6 +2,7 @@
 
 namespace Drupal\facets_custom_widget\Plugin\facets\widget;
 
+use Drupal\facets\FacetInterface;
 use Drupal\facets\Widget\WidgetPluginBase;
 
 /**
@@ -29,4 +30,11 @@ public function isPropertyRequired($name, $type) {
     return FALSE;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function supportsFacet(FacetInterface $facet) {
+    return \Drupal::state()->get('facets_test_supports_facet', TRUE);
+  }
+
 }
diff --git a/tests/src/Functional/ProcessorIntegrationTest.php b/tests/src/Functional/ProcessorIntegrationTest.php
index f45b630..45c3782 100644
--- a/tests/src/Functional/ProcessorIntegrationTest.php
+++ b/tests/src/Functional/ProcessorIntegrationTest.php
@@ -646,4 +646,25 @@ public function testPreQueryProcessor() {
     $this->assertSession()->pageTextContains('Llama');
   }
 
+  /**
+   * Tests the facet support for a widget.
+   */
+  public function testSupportsFacet() {
+    $id = 'masked_owl';
+    $this->createFacet('Australian masked owl', $id);
+
+    // Go the the facet edit page and check to see if the custom processor shows
+    // up.
+    $this->drupalGet('admin/config/search/facets/' . $id . '/edit');
+    $this->assertSession()->pageTextContains('test pre query');
+
+    // Make the ::supportsFacet method on the custom processor return false.
+    \Drupal::state()->set('facets_test_supports_facet', FALSE);
+
+    // Go to the facet edit page and check to see if the custom processor is
+    // now hidden.
+    $this->drupalGet('admin/config/search/facets/' . $id . '/edit');
+    $this->assertSession()->pageTextNotContains('test pre query');
+  }
+
 }
diff --git a/tests/src/Functional/WidgetIntegrationTest.php b/tests/src/Functional/WidgetIntegrationTest.php
index f5179f7..0e821f2 100644
--- a/tests/src/Functional/WidgetIntegrationTest.php
+++ b/tests/src/Functional/WidgetIntegrationTest.php
@@ -152,4 +152,25 @@ public function testCustomWidget() {
     $this->assertSession()->checkboxChecked('edit-facet-settings-show-only-one-result');
   }
 
+  /**
+   * Tests the facet support for a widget.
+   */
+  public function testSupportsFacet() {
+    $id = 'masked_owl';
+    $this->createFacet('Australian masked owl', $id);
+
+    // Go the the facet edit page and check to see if the custom widget shows
+    // up.
+    $this->drupalGet('admin/config/search/facets/' . $id . '/edit');
+    $this->assertSession()->pageTextContains('Custom widget');
+
+    // Make the ::supportsFacet method on the custom widget return false.
+    \Drupal::state()->set('facets_test_supports_facet', FALSE);
+
+    // Go to the facet edit page and check to see if the custom widget is now
+    // hidden.
+    $this->drupalGet('admin/config/search/facets/' . $id . '/edit');
+    $this->assertSession()->pageTextNotContains('Custom widget');
+  }
+
 }
