81 lines
2.0 KiB
PHP
81 lines
2.0 KiB
PHP
<?php
|
|
/**
|
|
* Marketplace suggestions updater
|
|
*
|
|
* Uses WC_Queue to ensure marketplace suggestions data is up to date and cached locally.
|
|
*
|
|
* @package WooCommerce\Classes
|
|
* @since 3.6.0
|
|
*/
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* Marketplace Suggestions Updater
|
|
*/
|
|
class WC_Marketplace_Updater {
|
|
|
|
/**
|
|
* Setup.
|
|
*/
|
|
public static function load() {
|
|
add_action( 'init', array( __CLASS__, 'init' ) );
|
|
}
|
|
|
|
/**
|
|
* Schedule events and hook appropriate actions.
|
|
*/
|
|
public static function init() {
|
|
add_action( 'woocommerce_update_marketplace_suggestions', array( __CLASS__, 'update_marketplace_suggestions' ) );
|
|
}
|
|
|
|
/**
|
|
* Fetches new marketplace data, updates wc_marketplace_suggestions.
|
|
*/
|
|
public static function update_marketplace_suggestions() {
|
|
$data = get_option(
|
|
'woocommerce_marketplace_suggestions',
|
|
array(
|
|
'suggestions' => array(),
|
|
'updated' => time(),
|
|
)
|
|
);
|
|
|
|
$data['updated'] = time();
|
|
|
|
$url = 'https://woocommerce.com/wp-json/wccom/marketplace-suggestions/1.0/suggestions.json';
|
|
$request = wp_safe_remote_get( $url );
|
|
|
|
if ( is_wp_error( $request ) ) {
|
|
self::retry();
|
|
return update_option( 'woocommerce_marketplace_suggestions', $data, false );
|
|
}
|
|
|
|
$body = wp_remote_retrieve_body( $request );
|
|
if ( empty( $body ) ) {
|
|
self::retry();
|
|
return update_option( 'woocommerce_marketplace_suggestions', $data, false );
|
|
}
|
|
|
|
$body = json_decode( $body, true );
|
|
if ( empty( $body ) || ! is_array( $body ) ) {
|
|
self::retry();
|
|
return update_option( 'woocommerce_marketplace_suggestions', $data, false );
|
|
}
|
|
|
|
$data['suggestions'] = $body;
|
|
return update_option( 'woocommerce_marketplace_suggestions', $data, false );
|
|
}
|
|
|
|
/**
|
|
* Used when an error has occured when fetching suggestions.
|
|
* Re-schedules the job earlier than the main weekly one.
|
|
*/
|
|
public static function retry() {
|
|
WC()->queue()->cancel_all( 'woocommerce_update_marketplace_suggestions' );
|
|
WC()->queue()->schedule_single( time() + DAY_IN_SECONDS, 'woocommerce_update_marketplace_suggestions' );
|
|
}
|
|
}
|
|
|
|
WC_Marketplace_Updater::load();
|