value * in a custom ruleset. * * @uses \WordPressCS\WordPress\Helpers\MinimumWPVersionTrait::$minimum_wp_version */ final class DeprecatedParametersSniff extends AbstractFunctionParameterSniff { use MinimumWPVersionTrait; /** * The group name for this group of functions. * * @since 0.12.0 * * @var string */ protected $group_name = 'wp_deprecated_parameters'; /** * Array of function, argument, and default value for deprecated argument. * * The functions are ordered alphabetically. * Last updated for WordPress 6.3. * * @since 0.12.0 * * @var array Multidimensional array with parameter details. * $target_functions = array( * (string) Function name. => array( * (int) Target parameter position, 1-based. => array( * 'name' => (string|array) Parameter name or list of names if the parameter * was renamed since the release of PHP 8.0. * 'value' => (mixed) Expected default value for the deprecated parameter. * Currently the default values: true, false, null, empty arrays * and both empty and non-empty strings can be handled correctly * by the process_parameters() method. * When an additional default value is added, the relevant code * in the process_parameters() method will need to be adjusted. * 'version' => (int) The WordPress version when deprecated. * ) * ) * ); */ protected $target_functions = array( '_future_post_hook' => array( 1 => array( 'name' => 'deprecated', 'value' => null, 'version' => '2.3.0', ), ), '_load_remote_block_patterns' => array( 1 => array( 'name' => 'deprecated', 'value' => null, 'version' => '5.9.0', ), ), '_wp_post_revision_fields' => array( 2 => array( 'name' => 'deprecated', 'value' => false, 'version' => '4.5.0', ), ), 'add_option' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.3.0', ), ), 'comments_link' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '0.72', ), 2 => array( 'name' => 'deprecated_2', 'value' => '', 'version' => '1.3.0', ), ), 'convert_chars' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '0.71', ), ), 'delete_plugins' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '4.0.0', ), ), 'discover_pingback_server_uri' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.7.0', ), ), 'get_blog_list' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', // Was previously part of MU. ), ), 'get_category_parents' => array( 5 => array( 'name' => 'deprecated', 'value' => array(), 'version' => '4.8.0', ), ), 'get_delete_post_link' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', ), ), 'get_last_updated' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', // Was previously part of MU. ), ), 'get_site_option' => array( 3 => array( 'name' => 'deprecated', 'value' => true, 'version' => '4.4.0', ), ), 'get_terms' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '4.5.0', ), ), 'get_the_author' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.1.0', ), ), 'get_user_option' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', ), ), 'get_wp_title_rss' => array( 1 => array( 'name' => 'deprecated', 'value' => '–', 'version' => '4.4.0', ), ), 'global_terms' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '6.1.0', ), ), 'iframe_header' => array( 2 => array( 'name' => 'deprecated', 'value' => false, 'version' => '4.2.0', ), ), 'install_search_form' => array( 1 => array( 'name' => 'deprecated', 'value' => true, 'version' => '4.6.0', ), ), 'is_email' => array( 2 => array( 'name' => 'deprecated', 'value' => false, 'version' => '3.0.0', ), ), 'load_plugin_textdomain' => array( 2 => array( 'name' => 'deprecated', 'value' => false, 'version' => '2.7.0', ), ), 'newblog_notify_siteadmin' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', ), ), 'permalink_single_rss' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.3.0', ), ), 'redirect_this_site' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', ), ), 'register_meta' => array( 4 => array( 'name' => 'deprecated', 'value' => null, 'version' => '4.6.0', ), ), 'safecss_filter_attr' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.8.1', ), ), 'switch_to_blog' => array( 2 => array( 'name' => 'deprecated', 'value' => null, 'version' => '3.5.0', // Was previously part of MU. ), ), 'term_description' => array( 2 => array( 'name' => 'deprecated', 'value' => null, 'version' => '4.9.2', ), ), 'the_attachment_link' => array( 3 => array( 'name' => 'deprecated', 'value' => false, 'version' => '2.5.0', ), ), 'the_author' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.1.0', ), 2 => array( 'name' => 'deprecated_echo', 'value' => true, 'version' => '1.5.0', ), ), 'the_author_posts_link' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.1.0', ), ), 'trackback_rdf' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.5.0', ), ), 'trackback_url' => array( 1 => array( 'name' => 'deprecated_echo', 'value' => true, 'version' => '2.5.0', ), ), 'unregister_setting' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '4.7.0', ), ), 'update_blog_option' => array( 4 => array( 'name' => 'deprecated', 'value' => null, 'version' => '3.1.0', ), ), 'update_blog_status' => array( 4 => array( 'name' => 'deprecated', 'value' => null, 'version' => '3.1.0', ), ), 'update_posts_count' => array( 1 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.0.0', ), ), 'update_user_status' => array( 4 => array( 'name' => 'deprecated', 'value' => null, 'version' => '3.0.2', ), ), 'wp_count_terms' => array( 2 => array( 'name' => 'deprecated', 'value' => '', 'version' => '5.6.0', ), ), 'wp_create_thumbnail' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '3.5.0', ), ), 'wp_get_http_headers' => array( 2 => array( 'name' => 'deprecated', 'value' => false, 'version' => '2.7.0', ), ), 'wp_get_sidebars_widgets' => array( 1 => array( 'name' => 'deprecated', 'value' => true, 'version' => '2.8.1', ), ), 'wp_install' => array( 5 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.6.0', ), ), 'wp_login' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.5.0', ), ), 'wp_new_user_notification' => array( 2 => array( 'name' => 'deprecated', 'value' => null, 'version' => '4.3.1', ), ), 'wp_notify_postauthor' => array( 2 => array( 'name' => 'deprecated', 'value' => null, 'version' => '3.8.0', ), ), 'wp_title_rss' => array( 1 => array( 'name' => 'deprecated', 'value' => '–', 'version' => '4.4.0', ), ), 'wp_upload_bits' => array( 2 => array( 'name' => 'deprecated', 'value' => null, 'version' => '2.0.0', ), ), 'xfn_check' => array( 3 => array( 'name' => 'deprecated', 'value' => '', 'version' => '2.5.0', ), ), ); /** * Process the parameters of a matched function. * * @since 0.12.0 * * @param int $stackPtr The position of the current token in the stack. * @param string $group_name The name of the group which was matched. * @param string $matched_content The token content (function name) which was matched * in lowercase. * @param array $parameters Array with information about the parameters. * * @return void */ public function process_parameters( $stackPtr, $group_name, $matched_content, $parameters ) { $this->set_minimum_wp_version(); $paramCount = \count( $parameters ); foreach ( $this->target_functions[ $matched_content ] as $position => $parameter_args ) { $found_param = PassedParameters::getParameterFromStack( $parameters, $position, $parameter_args['name'] ); if ( false === $found_param ) { continue; } // The list will need to updated if the default value is not supported. switch ( $found_param['raw'] ) { case 'true': $matched_parameter = true; break; case 'false': $matched_parameter = false; break; case 'null': $matched_parameter = null; break; case 'array()': case '[]': $matched_parameter = array(); break; default: $matched_parameter = TextStrings::stripQuotes( $found_param['raw'] ); break; } if ( $parameter_args['value'] === $matched_parameter ) { continue; } $message = 'The parameter "%s" at position #%s of %s() has been deprecated since WordPress version %s.'; $is_error = $this->wp_version_compare( $parameter_args['version'], $this->minimum_wp_version, '<' ); $code = MessageHelper::stringToErrorcode( ucfirst( $matched_content ) . 'Param' . $position . 'Found' ); $data = array( $found_param['raw'], $position, $matched_content, $parameter_args['version'], ); if ( isset( $parameter_args['value'] ) && isset( $found_param['name'] ) === false && $position < $paramCount ) { $message .= ' Use "%s" instead.'; $data[] = (string) $parameter_args['value']; } else { $message .= ' Instead do not pass the parameter.'; } MessageHelper::addMessage( $this->phpcsFile, $message, $stackPtr, $is_error, $code, $data, 0 ); } } }