
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 … 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