WordPress PHP Statistics Journey

WordPress PHP Statistic Insights

  • WordPress 1.0.0 (2004-01) wants PHP 4.0.6 (2001-06) minimum.
  • WordPress 1.2.0 (2004-05) wants PHP 4.1.0 (2001-12) minimum.
  • WordPress 2.2.0 (2007-05) wants PHP 4.2.0 (2002-04) minimum.
  • WordPress 2.5.0 (2008-03) wants PHP 4.3.0 (2002-12) minimum.
  • WordPress 3.2.0 (2011-07) wants PHP 5.2.4 (2007-08) minimum.
  • WordPress 5.2.0 (2019-05) wants PHP 5.6.20 (2016-03) minimum.
  • WordPress 6.3.0 (2023-08) wants PHP 7.0.0 (2015-12) minimum.
  • WordPress 6.6.0 (2024-07) wants PHP 7.2.24 (2019-10) minimum.

Notice that WordPress 2.5.0 seems to be when the fast-pace keeping up with the latest PHP releases has been officially decoupled.

A good choice, thank you, because forcing many-many minor PHP (runtime layer) upgrades to apply WordPress (application layer) fixes should be an environment owners choice; able to be planned, scheduled, executed in alignment with the websites owners outage window policies.

Decoupling runtime (PHP) from application (WordPress) updates has clear benefits; like reduced regression testing scope for all applications in that runtime environment and smaller outage windows that minimise service interruption (a brand reputation factor).

The official WordPress PHP statistics tells a short story (November 2024).

WordPress PHP Statistics
WordPress PHP Installations – By Version (2024-11)

Unfortunately, only reporting PHP statistics for WordPress >= 3.2.0.

Which skews reporting % distribution (a little) by not including >= PHP 4.3.

These WordPress PHP Statistics do not appear to cover the WordPress 3.0.0 to 3.1.4 PHP minimum requirements (>= PHP 4.3.0).

Does ~0.5 million websites out of ~493 million, skew it enough to matter?

WordPress PHP Installations – Version by % Table (2024-11)
Version Installations (%)
8.4 0.02%
8.3 4.92%
8.2 21.24%
8.1 19.47%
8.0 9.82%
7.4 33.23%
7.3 3.30%
7.2 2.77%
7.1 0.70%
7.0 1.12%
5.6 2.28%
5.5 0.26%
5.4 0.31%
5.3 0.39%
5.2 0.17%
5.1 (unknown)
5.0 (unknown)
4.4 (unknown)
4.3 (unknown)
  • With PHP 4.3 to 4.4 on (unknown) million websites.
  • With PHP 5.0 to 5.1 on (unknown) million websites.
  • With PHP 5.2 to 5.5 on ~5.571 million websites (~1.13%).
  • With PHP 5.6 to 5.6 on ~11.240 million websites (~2.28%).
  • With PHP 7.0 to 7.4 on ~202.722 million websites (~41.12%).
  • With PHP 8.0 to 8.4 on ~273.467 million websites (~55.47%).

With ~5.571 million PHP <= 5.5 WordPress websites officially not supported.

WordPress Plugin Development Considerations

What major features do WordPress Plugin developers need to consider as a core suite of WordPress and PHP capability to rely on, as a minimum?

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

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

Here are a few notable features used during WordPress plugin development.

  • 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 strstr() function.
  • PHP 1.99s (1996-05) for strtolower() 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 __FILE__ magic constant.
  • PHP 3.0.0 (1998-06) for __LINE__ magic constant.
  • PHP 3.0.0 (1998-06) for class command (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 (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 trim(), ltrim(), rtrim() functions.
  • PHP 3.0.7 (1999-03) for ignore_user_abort() 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 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 preg_replace() function.
  • PHP 4.0.0 (2000-05) for require_once() function.
  • PHP 4.0.4 (2000-12) for =& new class reference assignment.
  • PHP 4.0.4 (2000-12) for is_null() 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.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 namespace command.
  • PHP 5.4.0 (2012-02) for __TRAIT__ magic constant.
  • PHP 5.4.0 (2012-02) for trait command.
  • ——————-
  • 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 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 1.0.0 (2004-01) for apply_filters() function.
  • WordPress 1.0.0 (2004-01) for $wpdb::get_results() method.
  • 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 do_action() function.
  • WordPress 1.2.0 (2004-05) for plugin capability.
  • WordPress 1.5.0 (2005-02) for admin_menu hook.
  • 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.1 (2005-05) for is_admin() function.
  • WordPress 2.0.0 (2005-12) for current_user_can() function.
  • WordPress 2.0.4 (2005-12) 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.5.0 (2008-03) requires PHP >= 4.3.0 (2002-12).
  • WordPress 2.5.0 (2008-03) for admin_init hook.
  • WordPress 2.7.0 (2008-12) for plugin uninstall.php.
  • WordPress 2.7.0 (2008-12) for Settings API feature.
  • WordPress 2.7.0 (2008-12) for plugin_action_links_ hook.
  • WordPress 2.8.0 (2009-06) for esc_attr__() function.
  • WordPress 2.8.0 (2009-06) for plugin_row_meta hook.
  • WordPress 2.9.0 (2009-12) for wp_kses_post() function.
  • WordPress 3.1.0 (2011-02) for admin_notices hook.
  • ——————-
  • WordPress 3.2.1 (2011-07) requires PHP >= 5.2.4 (2007-08).
  • WordPress 5.1.0 (2019-02) for plugin_loaded hook.
  • ——————-
  • WordPress 5.2.0 (2019-05) requires PHP >= 5.6.20 (2016-03).
  • ——————-
  • WordPress 6.3.0 (2023-08) requires PHP >= 7.0.0 (2015-12).
  • ——————-
  • WordPress 6.6.0 (2024-07) requires PHP >= 7.2.24 (2019-10).

Question: 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 *