Mettre à jour les produits en stock après de nouvelles commandes Woocommerce

Si vous utilisez Woocommerce pour votre e-commerce et que vous remarquez que les produits en stock ne sont pas correctement mis à jour, vous pouvez utiliser ce MU-plugin pour vider le cache WP Rocket chaque fois qu'une nouvelle commande est terminée.

Le code suivant est destiné aux sites qui utilisent un mode de paiement instantané, comme les cartes de crédit. Il utilise le hook WooCommerce : woocommerce_payment_complete
Si votre site accepte des méthodes de paiement non-instantanées comme les virements bancaires, etc., vous devrez utiliser un hook différent dans la dernière ligne du code, comme woocommerce_order_status_on-hold

Vider le cache via un MU-Plugin:

Suivez les instructions générales de cet article : 
Comment créer un MU-plugin

1
Créez un dossier nommé mu-plugins dans votre dossier /wp-content.
Dans le cas où un dossier mu-plugins existe déjà, n'en créez pas un nouveau, il suffit d'utiliser celui existant.
2
À l'aide d'un éditeur de texte de base, créez un nouveau fichier et insérez le code suivant :
<?php
defined( 'ABSPATH' ) or die( 'No direct access here, kiddo.' );
/**
 * Plugin Name: WP Rocket | Clean Post Cache after WooCommerce Order
 * Description: Cleans the cache for each product ordered after a WooCommerce order has been completed.
 * Plugin URI:  http://docs.wp-rocket.me/article/881-update-products-on-stock-after-new-woocommerce-orders
 * Author:      WP Rocket Support Team
 * Author URI:  http://wp-rocket.me/
 * License:     GNU General Public License v3 or later
 * License URI: http://www.gnu.org/licenses/gpl-3.0.html
 */


/**
 * Clean post cache after order has been completed.
 * 
 * @param  int $order_id Order ID
 * @return void
 */
function wp_rocket_wc_clean_product_cache_after_order( $order_id ) {

	$order  = new WC_Order( $order_id );
	$items  = $order->get_items();

	foreach ( $items as $item ) {
		$post_id = absint( $item['product_id'] );
		rocket_clean_post( $post_id );
	}
}
add_action( 'woocommerce_payment_complete', 'wp_rocket_wc_clean_product_cache_after_order', 10 );
	
3
Sauvegardez le fichier avec le nom wp-rocket-wc-clean-product-cache.php
4
Envoyez ce fichier dans le dossier mu-plugins créé à l'étape 1
5
Enfin, désactivez et réactivez WP Rocket.