Automattic\WooCommerce\Internal\Caches

TaxRateVersionStringInvalidator{}WC 10.6.0

Tax rate version string invalidation handler.

This class provides an 'invalidate' method that will invalidate the version string for a given tax rate, which in turn invalidates any cached REST API responses containing that tax rate.

No Hooks.

Usage

$TaxRateVersionStringInvalidator = new TaxRateVersionStringInvalidator();
// use class methods

Methods

  1. public handle_woocommerce_tax_rate_added( $tax_rate_id )
  2. public handle_woocommerce_tax_rate_deleted( $tax_rate_id )
  3. public handle_woocommerce_tax_rate_updated( $tax_rate_id )
  4. public init()
  5. public invalidate( int $tax_rate_id )
  6. private invalidate_tax_rates_list()
  7. private register_hooks()

Changelog

Since 10.6.0 Introduced.

TaxRateVersionStringInvalidator{} code WC 10.7.0

class TaxRateVersionStringInvalidator {

	/**
	 * Initialize the invalidator and register hooks.
	 *
	 * Hooks are only registered when both conditions are met:
	 * - The REST API caching feature is enabled
	 * - The backend caching setting is active
	 *
	 * @return void
	 *
	 * @since 10.6.0
	 *
	 * @internal
	 */
	final public function init(): void {
		// We can't use FeaturesController::feature_is_enabled at this point
		// (before the 'init' action is triggered) because that would cause
		// "Translation loading for the woocommerce domain was triggered too early" warnings.
		if ( 'yes' !== get_option( 'woocommerce_feature_rest_api_caching_enabled' ) ) {
			return;
		}

		if ( 'yes' === get_option( 'woocommerce_rest_api_enable_backend_caching', 'no' ) ) {
			$this->register_hooks();
		}
	}

	/**
	 * Register all tax rate-related hooks.
	 *
	 * Registers hooks for tax rate CRUD operations fired by WC_Tax class.
	 *
	 * @return void
	 */
	private function register_hooks(): void {
		add_action( 'woocommerce_tax_rate_added', array( $this, 'handle_woocommerce_tax_rate_added' ), 10, 1 );
		add_action( 'woocommerce_tax_rate_updated', array( $this, 'handle_woocommerce_tax_rate_updated' ), 10, 1 );
		add_action( 'woocommerce_tax_rate_deleted', array( $this, 'handle_woocommerce_tax_rate_deleted' ), 10, 1 );
	}

	/**
	 * Handle the woocommerce_tax_rate_added hook.
	 *
	 * @param int $tax_rate_id The tax rate ID.
	 *
	 * @return void
	 *
	 * @since 10.6.0
	 *
	 * @internal
	 */
	public function handle_woocommerce_tax_rate_added( $tax_rate_id ): void {
		$this->invalidate( (int) $tax_rate_id );
		$this->invalidate_tax_rates_list();
	}

	/**
	 * Handle the woocommerce_tax_rate_updated hook.
	 *
	 * @param int $tax_rate_id The tax rate ID.
	 *
	 * @return void
	 *
	 * @since 10.6.0
	 *
	 * @internal
	 */
	public function handle_woocommerce_tax_rate_updated( $tax_rate_id ): void {
		$this->invalidate( (int) $tax_rate_id );
		$this->invalidate_tax_rates_list();
	}

	/**
	 * Handle the woocommerce_tax_rate_deleted hook.
	 *
	 * @param int $tax_rate_id The tax rate ID.
	 *
	 * @return void
	 *
	 * @since 10.6.0
	 *
	 * @internal
	 */
	public function handle_woocommerce_tax_rate_deleted( $tax_rate_id ): void {
		$this->invalidate( (int) $tax_rate_id );
		$this->invalidate_tax_rates_list();
	}

	/**
	 * Invalidate the tax rates list version string.
	 *
	 * Called when tax rates are added, updated, or deleted,
	 * as these operations affect collection/list endpoints.
	 *
	 * @return void
	 */
	private function invalidate_tax_rates_list(): void {
		wc_get_container()->get( VersionStringGenerator::class )->delete_version( 'list_tax_rates' );
	}

	/**
	 * Invalidate a tax rate version string.
	 *
	 * @param int $tax_rate_id The tax rate ID.
	 *
	 * @return void
	 *
	 * @since 10.6.0
	 */
	public function invalidate( int $tax_rate_id ): void {
		wc_get_container()->get( VersionStringGenerator::class )->delete_version( "tax_rate_{$tax_rate_id}" );
	}
}