WC_Abstract_Order::data_store_supports_deferred_item_deletion │ private │ WC 1.0

Determine whether the data store supports deferred item deletion.

Method of the class: WC_Abstract_Order{}

No Hooks.

Returns

bool.

Usage

// private - for code of main (parent) class only
$result = $this->data_store_supports_deferred_item_deletion(): bool;

WC_Abstract_Order::data_store_supports_deferred_item_deletion() code WC 11.1.2

private function data_store_supports_deferred_item_deletion(): bool {
	if ( null !== $this->data_store_supports_deferred_item_deletion ) {
		return $this->data_store_supports_deferred_item_deletion;
	}

	/**
	 * Data store wrapper.
	 *
	 * @var WC_Data_Store $data_store
	 */
	$data_store = $this->data_store;

	if ( ! $data_store->has_callable( 'delete_items' ) ) {
		$this->data_store_supports_deferred_item_deletion = true;
		return true;
	}

	$data_store_class = $data_store->get_current_class_name();
	$is_cpt_store     = is_a( $data_store_class, Abstract_WC_Order_Data_Store_CPT::class, true );

	if ( ! $is_cpt_store ) {
		// Standalone data stores opt in to deferred deletion by providing this optional method.
		$this->data_store_supports_deferred_item_deletion = $data_store->has_callable( 'delete_items_by_ids' );
		return $this->data_store_supports_deferred_item_deletion;
	}

	$delete_items_method = new ReflectionMethod( $data_store_class, 'delete_items' );
	if ( Abstract_WC_Order_Data_Store_CPT::class === $delete_items_method->getDeclaringClass()->getName() ) {
		$this->data_store_supports_deferred_item_deletion = true;
		return true;
	}

	if ( ! $data_store->has_callable( 'delete_items_by_ids' ) ) {
		$this->data_store_supports_deferred_item_deletion = false;
		return false;
	}

	$delete_items_by_ids_method = new ReflectionMethod( $data_store_class, 'delete_items_by_ids' );

	$this->data_store_supports_deferred_item_deletion = Abstract_WC_Order_Data_Store_CPT::class !== $delete_items_by_ids_method->getDeclaringClass()->getName();
	return $this->data_store_supports_deferred_item_deletion;
}