The adjusted extension score ranks WordPress themes and plugins using three signals:
Where:
-
$B$ = Bayesian user rating, from 0–5 -
$W$ = compatibility confidence, from 0–1 -
$M$ = maintenance confidence, from 0–1
Recommended weighting:
- 70% user ratings
- 20% verified compatibility
- 10% maintenance
The original star rating should remain visible. The adjusted score is intended for ranking, not as a replacement for the rating users submitted.
The Bayesian rating prevents extensions with only a few ratings from ranking unrealistically high.
Where:
-
$R$ = extension's average rating -
$v$ = number of ratings -
$C$ = global average across all extensions -
$m$ = confidence threshold
An extension with two perfect ratings is pulled toward the global average more strongly than one with hundreds of ratings.
Do not treat the extension version or Tested up to as proof of compatibility. Both are controlled by the author.
Separate compatibility into:
- Claimed compatibility: metadata covers the target WordPress version.
- Verified compatibility: independent tests pass.
Where:
-
$C_c$ = claimed compatibility, from 0–1 -
$V$ = verified compatibility, from 0–1
The subscript in
Changing Tested up to alone can therefore provide at most 20% compatibility confidence.
Verification can include:
- Installation
- Activation
- Front-end request
- Admin request
- PHP error detection
- Automated tests
- Plugin Check or Theme Check
- Theme template and block-editor checks
Repeated metadata-only bumps can reduce confidence when no verification exists.
Use the number of days since the last substantive or independently verified update, not the repository's raw “last updated” timestamp.
Where:
-
$a$ = age in days since the last substantive or verified update -
$H$ = maintenance half-life in days
With a two-year half-life:
- Today:
1.00 - One year: approximately
0.71 - Two years:
0.50 - Four years:
0.25
This prevents an author from resetting maintenance age by changing only a version number or Tested up to.
This input works for either a theme or plugin:
$result = calculate_adjusted_rating(
array(
'rating' => 4.7,
'rating_count' => 120,
'global_average' => 4.2,
'confidence_threshold' => 20,
'claims_target_version' => true,
'activation_passed' => true,
'runtime_tests_passed' => true,
'automated_tests_passed' => false,
'metadata_only_release' => true,
'consecutive_bumps' => 3,
'days_since_verified_update' => 500,
'maintenance_half_life' => 730,
)
);
print_r( $result );Result:
Array
(
[adjusted_rating] => 4.31
[bayesian_rating] => 4.63
[compatibility_confidence] => 0.76
[maintenance_confidence] => 0.622
)
Although the latest release changed only metadata, installation and runtime testing independently verified compatibility.
$result = calculate_adjusted_rating(
array(
'rating' => 4.7,
'rating_count' => 120,
'global_average' => 4.2,
'confidence_threshold' => 20,
'claims_target_version' => true,
'activation_passed' => false,
'runtime_tests_passed' => false,
'automated_tests_passed' => false,
'metadata_only_release' => true,
'consecutive_bumps' => 3,
'days_since_verified_update' => 500,
)
);
print_r( $result );Result:
Array
(
[adjusted_rating] => 3.70
[bayesian_rating] => 4.63
[compatibility_confidence] => 0.15
[maintenance_confidence] => 0.622
)
The original user rating remains strong, but the ranking drops because the compatibility claim has no supporting evidence.
Common metadata files include:
readme.txt
README.md
CHANGELOG.md
changelog.txt
Normalize version-only fields before comparing releases:
Version
Stable tag
Tested up to
Requires at least
Requires PHP
Functional files can include:
*.php
*.js
*.css
*.scss
*.json
*.html
templates/*
parts/*
patterns/*
blocks/*
assets/*
For themes, style.css contains both metadata and functional CSS. Strip or normalize only its theme header before calculating the content hash. Actual stylesheet changes must still count as substantive maintenance.
The adjusted score should be described as an adjusted extension score, not a user rating. It rewards established ratings, independently demonstrated compatibility, and sustained maintenance while making metadata-only manipulation much less valuable.