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 … 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 action.
  • 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 action.
  • 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} action.
  • WordPress 2.0.0 (2005-12) for current_user_can() function.
  • 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 action.
  • WordPress 2.5.0 (2008-03) for deprecated_file_included action.
  • WordPress 2.5.0 (2008-03) for deprecated_function_run action.
  • WordPress 2.7.0 (2008-12) for Settings API feature.
  • WordPress 2.7.0 (2008-12) for plugin_action_links_ action.
  • WordPress 2.7.0 (2008-12) for uninstall.php (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_html() 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_url() function.
  • WordPress 2.8.0 (2009-06) for get_translations_for_domain() function.
  • WordPress 2.8.0 (2009-06) for plugin_row_meta action.
  • WordPress 2.9.0 (2009-12) for activate_plugin action.
  • WordPress 2.9.0 (2009-12) for wp_kses_post() function.
  • WordPress 3.0.0 (2010-06) for deprecated_argument_run action.
  • WordPress 3.0.0 (2010-06) for is_textdomain_loaded() function.
  • WordPress 3.1.0 (2011-02) for _doing_it_wrong() function.
  • WordPress 3.1.0 (2011-02) for admin_notices action.
  • WordPress 3.1.0 (2011-02) for all_admin_notices action.
  • WordPress 3.1.0 (2011-02) for doing_it_wrong_run action.
  • WordPress 3.1.0 (2011-02) for esc_textarea() function.
  • WordPress 3.1.0 (2011-02) for network_admin_notices action.
  • WordPress 3.1.0 (2011-02) for user_admin_notices action.
  • ——————-
  • WordPress 3.2.0 (2011-07) requires PHP >= 5.2.4 (2007-08).
  • WordPress 3.2.0 (2011-07) for login_init action.
  • WordPress 4.3.0 (2015-08) for deprecated_constructor_run action.
  • WordPress 4.6.0 (2016-08) for deprecated_hook_run action.
  • 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 action.
  • ——————-
  • 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 6.3.0 (2023-08) requires PHP >= 7.0.0 (2015-12).
  • WordPress 6.4.0 (2023-11) for deprecated_class_run action.
  • 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 *