Version Features for WordPress Plugin Developers

Minimum Version Features for WordPress Plugin Developers to build and support their plugin.

What version features for WordPress Plugin developers should be considered as the minimum required for development and support? For both PHP and WordPress.

One perspective … PHP classes do not really become practical until the private, protected and public scope visibility for members and methods is available … just a 2 cent opnion.

  • Consider >= WordPress 3.2.0 (2011-07) minimum.
  • Consider >= PHP 5.2.4 (2007-08) minimum.

Another perspective … building sizeable custom features in plugins and themes becomes maintainable and supportable with access to the PHP namespace command and the WordPress wp_raise_memory_limit() function … just a 2 cent opnion.

  • Consider >= WordPress 4.6.0 (2016-08) minimum.
  • Consider >= PHP 5.3.0 (2009-06) minimum.

Alternative perspective … PHP runtime behaviour does greatly benefit from access to namespace capability plus code readability by aligning with the PSR-12 Extended Coding Style specification. WordPress runtime behaviour is greatly improved by the WordPress Recovery Mode feature for when 3rd-Party code misbehave … just a 5 cent opnion.

  • Recommend >= WordPress 5.2.0 (2019-05) minimum.
  • Recommend >= PHP 5.6.20 (2016-03) minimum.

Here are a few notable features to consider during WordPress plugin development.

PHP Version Features

  • PHP 1.99s (1996-05) for array() function to declare instance.
  • PHP 1.99s (1996-05) for array[{#|’name’}] syntax for named-array.
  • PHP 1.99s (1996-05) for break statement.
  • PHP 1.99s (1996-05) for count() function.
  • PHP 1.99s (1996-05) for echo command.
  • PHP 1.99s (1996-05) for exit() function (no parameter).
  • PHP 1.99s (1996-05) for fputs() function.
  • PHP 1.99s (1996-05) for global command.
  • PHP 1.99s (1996-05) for include command.
  • PHP 1.99s (1996-05) for isset() function.
  • PHP 1.99s (1996-05) for null variable value.
  • PHP 1.99s (1996-05) for return statement.
  • PHP 1.99s (1996-05) for static variable statement.
  • PHP 1.99s (1996-05) for strchr() function.
  • PHP 1.99s (1996-05) for strlen() function.
  • PHP 1.99s (1996-05) for strrchr() function.
  • PHP 1.99s (1996-05) for strstr() function.
  • PHP 1.99s (1996-05) for strtok() function.
  • PHP 1.99s (1996-05) for strtolower() function.
  • PHP 1.99s (1996-05) for strtoupper() function.
  • PHP 1.99s (1996-05) for subval() function.
  • PHP 1.99s (1996-05) for substr() function.
  • PHP 1.99s (1996-05) for unset() function.
  • PHP 3.0.0 (1998-06) for ‘.’ and ‘.=’ string concatenation operators.
  • PHP 3.0.0 (1998-06) for ‘? :’ ternary operator (shorthand if-then-else).
  • PHP 3.0.0 (1998-06) for __FILE__ magic constant.
  • PHP 3.0.0 (1998-06) for __LINE__ magic constant.
  • PHP 3.0.0 (1998-06) for class command. Always public scope.
  • PHP 3.0.0 (1998-06) for dirname() function.
  • PHP 3.0.0 (1998-06) for empty() function.
  • PHP 3.0.0 (1998-06) for error_log() function.
  • PHP 3.0.0 (1998-06) for exit() function (with parameter).
  • PHP 3.0.0 (1998-06) for extends command. Always public scope.
  • PHP 3.0.0 (1998-06) for is_array() function.
  • PHP 3.0.0 (1998-06) for is_integer() function.
  • PHP 3.0.0 (1998-06) for pass-by-reference parameters in function definition.
  • PHP 3.0.0 (1998-06) for trim(), ltrim(), rtrim() functions.
  • PHP 3.0.7 (1999-03) for ignore_user_abort() function.
  • PHP 3.0.18 (2000-10) for return-by-reference from function.
  • PHP 4.0.0 (2000-05) for === and !== operators.
  • PHP 4.0.0 (2000-05) for [] array short syntax.
  • PHP 4.0.0 (2000-05) for array_merge() function.
  • PHP 4.0.0 (2000-05) for die() function.
  • PHP 4.0.0 (2000-05) for foreach command.
  • PHP 4.0.0 (2000-05) for function_exists() function.
  • PHP 4.0.0 (2000-05) for fwrite() function.
  • PHP 4.0.0 (2000-05) for include_once() function.
  • PHP 4.0.0 (2000-05) for method_exists() function.
  • PHP 4.0.0 (2000-05) for preg_replace() function.
  • PHP 4.0.0 (2000-05) for require_once() function.
  • PHP 4.0.0 (2000-05) for stristr() function.
  • PHP 4.0.0 (2000-05) for strval() function.
  • PHP 4.0.4 (2000-12) for =& new class reference assignment.
  • PHP 4.0.4 (2000-12) for constant() function.
  • PHP 4.0.4 (2000-12) for is_null() function.
  • PHP 4.0.7 (2001-10) for array_key_exists() function.
  • PHP 4.1.0 (2001-12) for version_compare() function.
  • ——————-
  • PHP 4.3.0 (2002-12) minimum for WordPress >= 2.5.0 (2008-03).
  • PHP 4.3.0 (2002-12) for __CLASS__ magic constant.
  • PHP 4.3.0 (2002-12) for __FUNCTION__ magic constant.
  • PHP 4.3.0 (2002-12) for debug_backtrace() function.
  • PHP 5.0.0 (2004-07) for __METHOD__ magic constant.
  • PHP 5.0.0 (2004-07) for abstract modifier.
  • PHP 5.0.0 (2004-07) for const modifier.
  • PHP 5.0.0 (2004-07) for final modifier.
  • PHP 5.0.0 (2004-07) for implements command.
  • PHP 5.0.0 (2004-07) for interface command.
  • PHP 5.0.0 (2004-07) for private scope.
  • PHP 5.0.0 (2004-07) for protected scope.
  • PHP 5.0.0 (2004-07) for public scope.
  • PHP 5.0.0 (2004-07) for use command.
  • PHP 5.1.0 (2005-11) for PHP_INT_MAX constant.
  • PHP 5.1.0 (2005-11) for PHP_INT_SIZE constant.
  • PHP 5.2.0 (2006-11) for filter_var() function.
  • ——————-
  • PHP 5.2.4 (2007-08) minimum for WordPress >= 3.2.1 (2011-07).
  • PHP 5.3.0 (2009-06) for __DIR__ magic constant.
  • PHP 5.3.0 (2009-06) for __NAMESPACE__ magic constant.
  • PHP 5.3.0 (2009-06) for ‘?:’ shorthand ternary operator (shorthand if-else).
  • PHP 5.3.0 (2009-06) for namespace command.
  • PHP 5.4.0 (2012-02) for __TRAIT__ magic constant.
  • PHP 5.4.0 (2012-02) for trait command.
  • PHP 5.6.0 (2014-08) for Freemius supported SDK (Verified 2024-12).
  • ——————-
  • PHP 5.6.20 (2016-03) minimum for WordPress >= 5.2.0 (2019-05).
  • ——————-
  • PHP 7.0.0 (2015-12) minimum for WordPress >= 6.3.0 (2023-08).
  • PHP 7.0.0 (2015-12) for PHP_INT_MIN constant.
  • PHP 7.0.0 (2015-12) for null coalescing operator (??).
  • ——————-
  • PHP 7.2.24 (2019-10) minimum for WordPress >= 6.6.0 (2024-07).
  • PHP 8.0.0 (2020-11) for new class with arbitrary expression.
  • PHP 8.0.0 (2020-11) for trait private abstract method define.
  • PHP 8.2.0 (2022-12) for readonly class modifer.
  • PHP 8.2.0 (2022-12) for trait constant member define.

WordPress Version Features

  • WordPress 1.0.0 (2004-01) for $wp_version global variable.
  • WordPress 1.0.0 (2004-01) for $wpdb::get_results() method.
  • WordPress 1.0.0 (2004-01) for ABSPATH constant.
  • WordPress 1.0.0 (2004-01) for add_option() function.
  • WordPress 1.0.0 (2004-01) for apply_filters() function.
  • WordPress 1.0.0 (2004-01) for update_option() function.
  • WordPress 1.2.0 (2004-05) for add_action() function.
  • WordPress 1.2.0 (2004-05) for check_admin_referer() function.
  • WordPress 1.2.0 (2004-05) for delete_option() function.
  • WordPress 1.2.0 (2004-05) for do_action() function.
  • WordPress 1.2.0 (2004-05) for plugin capability.
  • WordPress 1.5.0 (2005-02) for add_query_arg() function.
  • WordPress 1.5.0 (2005-02) for admin_menu hook.
  • WordPress 1.5.0 (2005-02) for get_option() function.
  • WordPress 1.5.0 (2005-02) for load_plugin_textdomain() function.
  • WordPress 1.5.0 (2005-02) for Options API.
  • WordPress 1.5.0 (2005-02) for plugins_loaded hook.
  • WordPress 1.5.0 (2005-02) for remove_query_arg() function.
  • WordPress 1.5.1 (2005-05) for is_admin() function.
  • WordPress 2.0.0 (2005-12) for activate_${plugin} hook.
  • WordPress 2.0.0 (2005-12) for add_role() function.
  • WordPress 2.0.0 (2005-12) for current_user_can() function.
  • WordPress 2.0.0 (2005-12) for deactivate_${plugin} hook.
  • WordPress 2.0.0 (2005-12) for get_role() function.
  • WordPress 2.0.0 (2005-12) for get_user_option() function.
  • WordPress 2.0.0 (2005-12) for is_user_logged_in() function.
  • WordPress 2.0.0 (2005-12) for register_activation_hook() function.
  • WordPress 2.0.0 (2005-12) for register_deactivation_hook() function.
  • WordPress 2.0.0 (2005-12) for remove_role() function.
  • WordPress 2.0.0 (2005-12) for role_has_cap hook.
  • WordPress 2.0.0 (2005-12) for update_user_option() function.
  • WordPress 2.0.0 (2005-12) for WP() class.
  • WordPress 2.0.0 (2005-12) for WP_Role() class.
  • WordPress 2.0.0 (2005-12) for WP_Roles() class.
  • WordPress 2.0.0 (2005-12) for WP_User() class.
  • WordPress 2.0.1 (2006-02) for set_current_user action.
  • WordPress 2.0.4 (2006-07) for wp_die() function.
  • WordPress 2.1.0 (2007-01) for __() function.
  • WordPress 2.1.0 (2007-01) for admin-ajax.php feature.
  • WordPress 2.1.0 (2007-01) for WP_Error class.
  • WordPress 2.3.0 (2007-09) for wpdb::prepare() method.
  • WordPress 2.3.1 (2007-10) for sanitize_url() function.
  • ——————-
  • WordPress 2.5.0 (2008-03) requires PHP >= 4.3.0 (2002-12).
  • WordPress 2.5.0 (2008-03) for admin_init hook.
  • WordPress 2.5.0 (2008-03) for deprecated_file_included hook.
  • WordPress 2.5.0 (2008-03) for deprecated_function_run hook.
  • WordPress 2.7.0 (2008-12) for Settings API feature.
  • WordPress 2.7.0 (2008-12) for plugin_action_links_ hook.
  • WordPress 2.7.0 (2008-12) for uninstall.php (aka Method 2).
  • WordPress 2.7.0 (2008-12) for WP_UNINSTALL_PLUGIN (aka Method 2).
  • WordPress 2.8.0 (2009-06) for esc_attr() function.
  • WordPress 2.8.0 (2009-06) for esc_attr__() function.
  • WordPress 2.8.0 (2009-06) for esc_attr_e() function.
  • WordPress 2.8.0 (2009-06) for esc_attr_x() function.
  • WordPress 2.8.0 (2009-06) for esc_html() function.
  • WordPress 2.8.0 (2009-06) for esc_html__() function.
  • WordPress 2.8.0 (2009-06) for esc_html_e() function.
  • WordPress 2.8.0 (2009-06) for esc_js() function.
  • WordPress 2.8.0 (2009-06) for esc_sql() function.
  • WordPress 2.8.0 (2009-06) for esc_textarea() function.
  • WordPress 2.8.0 (2009-06) for esc_url() function.
  • WordPress 2.8.0 (2009-06) for esc_url_raw() function.
  • WordPress 2.8.0 (2009-06) for get_translations_for_domain() function.
  • WordPress 2.8.0 (2009-06) for plugin_row_meta hook.
  • WordPress 2.9.0 (2009-12) for activate_plugin hook.
  • WordPress 2.9.0 (2009-12) for esc_html_x() function.
  • WordPress 2.9.0 (2009-12) for wp_kses_post() function.
  • WordPress 3.0.0 (2010-06) for delete_user_meta() function.
  • WordPress 3.0.0 (2010-06) for deprecated_argument_run hook.
  • WordPress 3.0.0 (2010-06) for get_user_meta() function.
  • WordPress 3.0.0 (2010-06) for is_textdomain_loaded() function.
  • WordPress 3.0.0 (2010-06) for update_user_meta() function.
  • WordPress 3.1.0 (2011-02) for _doing_it_wrong() function.
  • WordPress 3.1.0 (2011-02) for admin_notices hook.
  • WordPress 3.1.0 (2011-02) for all_admin_notices hook.
  • WordPress 3.1.0 (2011-02) for doing_it_wrong_run hook.
  • WordPress 3.1.0 (2011-02) for esc_textarea() function.
  • WordPress 3.1.0 (2011-02) for network_admin_notices hook.
  • WordPress 3.1.0 (2011-02) for user_admin_notices hook.
  • ——————-
  • WordPress 3.2.0 (2011-07) requires PHP >= 5.2.4 (2007-08).
  • WordPress 3.2.0 (2011-07) for login_init hook.
  • WordPress 4.3.0 (2015-08) for deprecated_constructor_run hook.
  • WordPress 4.6.0 (2016-08) for deprecated_hook_run hook.
  • WordPress 4.6.0 (2016-08) for wp_raise_memory_limit() function.
  • WordPress 4.9.9 (2018-12) for Freemius supported SDK (Verified 2024-12).
  • WordPress 5.1.0 (2019-02) for plugin_loaded hook.
  • ——————-
  • WordPress 5.2.0 (2019-05) requires PHP >= 5.6.20 (2016-03).
  • WordPress 5.2.0 (2019-05) for recovery mode of white-screen-of-death.
  • WordPress 5.5.0 (2020-08) for esc_xml() function.
  • WordPress 5.7.0 (2021-03) for wp_robots hook.
  • ——————-
  • WordPress 6.3.0 (2023-08) requires PHP >= 7.0.0 (2015-12).
  • WordPress 6.4.0 (2023-11) for deprecated_class_run hook.
  • WordPress 6.5.0 (2024-04) for enforced active plugin dependency.
  • ——————-
  • WordPress 6.6.0 (2024-07) requires PHP >= 7.2.24 (2019-10).

Question and Comments

Given the combined complexity of ‘WordPress + PHP’ features, what are your thoughts on how to choose which versions your plugin is going to support?

Leave a Reply

Your email address will not be published. Required fields are marked *