diff --git src/wp-includes/option.php src/wp-includes/option.php
index dcd17956b9..c03232584d 100644
|
|
|
function add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' ) |
| 549 | 549 | function delete_option( $option ) { |
| 550 | 550 | global $wpdb; |
| 551 | 551 | |
| 552 | | $option = trim( $option ); |
| | 552 | /** |
| | 553 | * Filters the option name before the option gets deleted. |
| | 554 | * |
| | 555 | * Returning an empty string short circuits the function. |
| | 556 | * |
| | 557 | * @since 5.3.0 |
| | 558 | * |
| | 559 | * @param string $option Option name. |
| | 560 | */ |
| | 561 | $option = trim( apply_filters( 'pre_delete_option', $option ) ); |
| | 562 | |
| 553 | 563 | if ( empty( $option ) ) { |
| 554 | 564 | return false; |
| 555 | 565 | } |
diff --git tests/phpunit/tests/option/option.php tests/phpunit/tests/option/option.php
index f61f59b88b..65f5d3b6f3 100644
|
|
|
class Tests_Option_Option extends WP_UnitTestCase { |
| 140 | 140 | $actual = $wpdb->get_row( $wpdb->prepare( "SELECT autoload FROM $wpdb->options WHERE option_name = %s LIMIT 1", $name ) ); |
| 141 | 141 | $this->assertEquals( $expected, $actual->autoload ); |
| 142 | 142 | } |
| | 143 | |
| | 144 | /** |
| | 145 | * @ticket 44042 |
| | 146 | */ |
| | 147 | function test_pre_delete_option_filter() { |
| | 148 | add_filter( 'pre_delete_option', function( $option ) { |
| | 149 | if ( 'test_option_test' === $option ) { |
| | 150 | $option = 'test_option'; |
| | 151 | } |
| | 152 | |
| | 153 | return $option; |
| | 154 | } ); |
| | 155 | |
| | 156 | add_option( 'test_option', '1' ); |
| | 157 | delete_option( 'test_option_test' ); |
| | 158 | |
| | 159 | $this->assertEquals( false, get_option( 'test_option' ) ); |
| | 160 | |
| | 161 | } |
| | 162 | |
| | 163 | /** |
| | 164 | * Returning an empty string in `pre_delete_option` short circuits `delete_option()`. |
| | 165 | * |
| | 166 | * @ticket 44042 |
| | 167 | */ |
| | 168 | function test_pre_delete_option_short_circuit() { |
| | 169 | add_filter( 'pre_delete_option', function( $option ) { |
| | 170 | if ( 'test_option' === $option ) { |
| | 171 | return ''; |
| | 172 | } |
| | 173 | } ); |
| | 174 | |
| | 175 | add_option( 'test_option', '5' ); |
| | 176 | delete_option( 'test_option' ); |
| | 177 | |
| | 178 | $this->assertEquals( '5', get_option( 'test_option' ) ); |
| | 179 | } |
| 143 | 180 | } |