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.