104 lines
2.3 KiB
PHP
104 lines
2.3 KiB
PHP
<?php
|
|
/**
|
|
* Customize Site Health recommendations for WooCommerce.
|
|
*/
|
|
|
|
namespace Automattic\WooCommerce\Internal\Admin;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* SiteHealth class.
|
|
*/
|
|
class SiteHealth {
|
|
/**
|
|
* Class instance.
|
|
*
|
|
* @var SiteHealth instance
|
|
*/
|
|
protected static $instance = null;
|
|
|
|
/**
|
|
* Get class instance.
|
|
*/
|
|
public static function get_instance() {
|
|
if ( ! self::$instance ) {
|
|
self::$instance = new self();
|
|
}
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Hook into WooCommerce.
|
|
*/
|
|
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.
|
|
if ( true === $check ) {
|
|
return $check;
|
|
}
|
|
|
|
$thresholds = array(
|
|
'orders' => 100,
|
|
'products' => 100,
|
|
);
|
|
|
|
foreach ( $thresholds as $key => $threshold ) {
|
|
try {
|
|
switch ( $key ) {
|
|
case 'orders':
|
|
$orders_query = new \WC_Order_Query(
|
|
array(
|
|
'status' => 'any',
|
|
'limit' => 1,
|
|
'paginate' => true,
|
|
'return' => 'ids',
|
|
)
|
|
);
|
|
$orders_results = $orders_query->get_orders();
|
|
if ( $orders_results->total >= $threshold ) {
|
|
$check = true;
|
|
}
|
|
break;
|
|
|
|
case 'products':
|
|
$products_query = new \WC_Product_Query(
|
|
array(
|
|
'status' => 'any',
|
|
'limit' => 1,
|
|
'paginate' => true,
|
|
'return' => 'ids',
|
|
)
|
|
);
|
|
$products_results = $products_query->get_products();
|
|
if ( $products_results->total >= $threshold ) {
|
|
$check = true;
|
|
}
|
|
break;
|
|
}
|
|
} catch ( \Exception $exception ) {
|
|
break;
|
|
}
|
|
|
|
if ( ! is_null( $check ) ) {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return $check;
|
|
}
|
|
}
|