diff --git a/src/wp-includes/general-template.php b/src/wp-includes/general-template.php
index acc3b5bda2..1a23cb4316 100644
--- a/src/wp-includes/general-template.php
+++ b/src/wp-includes/general-template.php
@@ -5026,7 +5026,14 @@ function wp_required_field_indicator() {
$glyph = __( '*' );
$indicator = '' . esc_html( $glyph ) . '';
- return $indicator;
+ /**
+ * Filters the markup for a visual indicator of required form fields.
+ *
+ * @since 6.1.0
+ *
+ * @param string $indicator Markup for the indicator element.
+ */
+ return apply_filters( 'wp_required_field_indicator', $indicator );
}
/**
@@ -5043,7 +5050,14 @@ function wp_required_field_message() {
sprintf( __( 'Required fields are marked %s' ), wp_required_field_indicator() )
);
- return $message;
+ /**
+ * Filters the message to explain required form fields.
+ *
+ * @since 6.1.0
+ *
+ * @param string $message Message text and glyph wrapped in a `span` tag.
+ */
+ return apply_filters( 'wp_required_field_message', $message );
}
/**
diff --git a/tests/phpunit/tests/general/wpRequiredFieldIndicator.php b/tests/phpunit/tests/general/wpRequiredFieldIndicator.php
new file mode 100644
index 0000000000..bd66379a2a
--- /dev/null
+++ b/tests/phpunit/tests/general/wpRequiredFieldIndicator.php
@@ -0,0 +1,45 @@
+assertSame( '*', wp_required_field_indicator() );
+ }
+
+ /**
+ * Tests that `wp_required_field_indicator()` applies 'wp_required_field_indicator' filters.
+ *
+ * @ticket 56389
+ */
+ public function test_wp_required_field_indicator_should_apply_wp_required_field_indicator_filters() {
+ $filter = new MockAction();
+ add_filter( 'wp_required_field_indicator', array( &$filter, 'filter' ) );
+
+ wp_required_field_indicator();
+
+ $this->assertSame( 1, $filter->get_call_count() );
+ }
+
+ /**
+ * Tests that the final return value of `wp_required_field_indicator()` is the result of
+ * 'wp_required_field_indicator' filters.
+ *
+ * @ticket 56389
+ */
+ public function test_wp_required_field_indicator_should_return_wp_required_field_indicator_filters() {
+ add_filter( 'wp_required_field_indicator', '__return_empty_string' );
+ $this->assertSame( '', wp_required_field_indicator() );
+ }
+}
diff --git a/tests/phpunit/tests/general/wpRequiredFieldMessage.php b/tests/phpunit/tests/general/wpRequiredFieldMessage.php
new file mode 100644
index 0000000000..2dc1a3b8b8
--- /dev/null
+++ b/tests/phpunit/tests/general/wpRequiredFieldMessage.php
@@ -0,0 +1,48 @@
+';
+ $expected .= 'Required fields are marked *';
+ $expected .= '';
+ $this->assertSame( $expected, wp_required_field_message() );
+ }
+
+ /**
+ * Tests that `wp_required_field_message()` applies 'wp_required_field_message' filters.
+ *
+ * @ticket 56389
+ */
+ public function test_wp_required_field_message_should_apply_wp_required_field_message_filters() {
+ $filter = new MockAction();
+ add_filter( 'wp_required_field_message', array( &$filter, 'filter' ) );
+
+ wp_required_field_message();
+
+ $this->assertSame( 1, $filter->get_call_count() );
+ }
+
+ /**
+ * Tests that the final return value of `wp_required_field_message()` is the result of
+ * 'wp_required_field_message' filters.
+ *
+ * @ticket 56389
+ */
+ public function test_wp_required_field_message_should_return_wp_required_field_message_filters() {
+ add_filter( 'wp_required_field_message', '__return_empty_string' );
+ $this->assertSame( '', wp_required_field_message() );
+ }
+}