* Customize Site Health recommendations for WooCommerce.
namespace Automattic\WooCommerce\Internal\Admin;
defined( 'ABSPATH' ) || exit;
* @var SiteHealth instance
protected static $instance = null;
public static function get_instance() {
if ( ! self::$instance ) {
self::$instance = new self();
public function __construct() {
add_filter( 'site_status_should_suggest_persistent_object_cache', array( $this, 'should_suggest_persistent_object_cache' ) );
* Counts specific types of WooCommerce entities to determine if a persistent object cache would be beneficial.
* Note that if all measured WooCommerce entities are below their thresholds, this will return null so that the
* other normal WordPress checks will still be run.
* @param true|null $check A non-null value will short-circuit WP's normal tests for this.
* @return true|null True if the store would benefit from a persistent object cache. Otherwise null.
public function should_suggest_persistent_object_cache( $check ) {
// Skip this if some other filter has already determined yes.
foreach ( $thresholds as $key => $threshold ) {
$orders_query = new \WC_Order_Query(
$orders_results = $orders_query->get_orders();
if ( $orders_results->total >= $threshold ) {
$products_query = new \WC_Product_Query(
$products_results = $products_query->get_products();
if ( $products_results->total >= $threshold ) {
} catch ( \Exception $exception ) {
if ( ! is_null( $check ) ) {