
Table of Contents
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