Code Modernization: Fix 'ping_sites' non-nullable deprecation.
When saving options from the Settings page, include the 'ping_sites'
option in the allowed "writing" options list only when the 'blog_public'
option is '1'
.
Fixes a PHP 8.1 and above "null to non-nullable" deprecation notice in sanitize_option()
(which happens when here as part of [22255]):
Deprecated: explode(): Passing null to parameter #2 ($string) of type string is deprecated in .../wp-includes/formatting.php
Explanation
Per the documentation, the ping_sites
option requires the 'blog_public'
option to have a value of '1'
and must be a string
data type. null
is not valid for this option.
The relationship between the 2 options shows itself in the options-writing.php
code (shown here and in [4326]), as the textarea#ping_sites
only renders when '1' === get_option( 'blog_public' )
.
What happens if 'blog_public'
is not '1'
?
The 'ping_sites'
option will not be a field on the page. Upon saving:
- HTTP POST (
$_POST
) does not include 'ping_sites'
.
- Before this commit:
- The option's value was set to
null
before being passed to update_option()
.
update_option()
invokes sanitize_option()
.
- A
null
value for the 'ping_sites'
case was passed to explode()
, which threw a deprecation notice on PHP 8.1 and above.
- With this commit, the
'ping_sites'
option is no longer included in the allow list and thus will not be passed to update_options()
> sanitize_option()
> explode()
.
Follow-up to [22255], [12825], [4326], [949].
Props kitchin, SergeyBiryukov, swissspidy, devmuhib, rajinsharwar, hellofromTonya.
Fixes #59818.