SILENT KILLERPanel

Current Path: > home > codekrsu > > ameliagraphics.com > wp-content > plugins > woocommerce > includes >


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/codekrsu//ameliagraphics.com/wp-content/plugins/woocommerce/includes/

NameTypeSizeLast ModifiedActions
abstracts Directory - -
admin Directory - -
blocks Directory - -
cli Directory - -
customizer Directory - -
data-stores Directory - -
emails Directory - -
export Directory - -
gateways Directory - -
import Directory - -
integrations Directory - -
interfaces Directory - -
legacy Directory - -
libraries Directory - -
log-handlers Directory - -
payment-tokens Directory - -
product-usage Directory - -
queue Directory - -
react-admin Directory - -
rest-api Directory - -
shipping Directory - -
shortcodes Directory - -
theme-support Directory - -
tracks Directory - -
traits Directory - -
walkers Directory - -
wccom-site Directory - -
widgets Directory - -
class-wc-ajax.php File 122567 bytes June 23 2025 19:46:28.
class-wc-auth.php File 12995 bytes July 30 2024 19:31:16.
class-wc-autoloader.php File 3401 bytes September 23 2024 20:44:04.
class-wc-background-emailer.php File 4685 bytes August 20 2020 23:18:50.
class-wc-background-updater.php File 3535 bytes August 20 2020 23:18:50.
class-wc-brands-brand-settings-manager.php File 1826 bytes September 23 2024 20:44:04.
class-wc-brands-coupons.php File 7059 bytes January 21 2025 18:53:44.
class-wc-brands.php File 34095 bytes July 07 2025 13:23:42.
class-wc-breadcrumb.php File 9722 bytes October 21 2020 03:38:50.
class-wc-cache-helper.php File 11438 bytes August 27 2024 23:04:44.
class-wc-cart-fees.php File 3448 bytes September 26 2023 21:42:36.
class-wc-cart-session.php File 20140 bytes June 23 2025 19:46:28.
class-wc-cart-totals.php File 29166 bytes July 07 2025 13:23:42.
class-wc-cart.php File 72605 bytes June 30 2025 17:49:22.
class-wc-checkout.php File 51349 bytes May 12 2025 21:07:28.
class-wc-cli.php File 2935 bytes May 12 2025 21:07:28.
class-wc-comments.php File 23066 bytes June 23 2025 19:46:28.
class-wc-countries.php File 50342 bytes May 12 2025 21:07:28.
class-wc-coupon.php File 40825 bytes June 23 2025 19:46:28.
class-wc-customer-download-log.php File 3452 bytes August 20 2020 23:18:50.
class-wc-customer-download.php File 10587 bytes July 30 2024 19:31:16.
class-wc-customer.php File 33300 bytes June 23 2025 19:46:28.
class-wc-data-exception.php File 1321 bytes May 23 2018 19:30:10.
class-wc-data-store.php File 6752 bytes October 19 2022 00:34:38.
class-wc-datetime.php File 2310 bytes April 20 2022 06:50:54.
class-wc-deprecated-action-hooks.php File 6746 bytes February 27 2024 18:59:46.
class-wc-deprecated-filter-hooks.php File 7518 bytes February 22 2023 07:17:34.
class-wc-discounts.php File 37476 bytes June 23 2025 19:46:28.
class-wc-download-handler.php File 29053 bytes December 18 2024 22:19:16.
class-wc-emails.php File 34457 bytes June 23 2025 19:46:28.
class-wc-embed.php File 4342 bytes January 21 2025 18:53:44.
class-wc-form-handler.php File 46932 bytes June 23 2025 19:46:28.
class-wc-frontend-scripts.php File 28511 bytes May 12 2025 21:07:28.
class-wc-geo-ip.php File 31139 bytes June 23 2025 19:46:28.
class-wc-geolite-integration.php File 2036 bytes January 16 2020 06:10:02.
class-wc-geolocation.php File 11594 bytes May 12 2025 21:07:28.
class-wc-https.php File 4439 bytes June 20 2023 23:45:50.
class-wc-install.php File 109669 bytes June 23 2025 19:46:28.
class-wc-integrations.php File 1308 bytes August 20 2020 23:18:50.
class-wc-log-levels.php File 3992 bytes January 30 2024 23:24:56.
class-wc-logger.php File 9601 bytes May 12 2025 21:07:28.
class-wc-meta-data.php File 2260 bytes April 20 2022 06:50:54.
class-wc-order-factory.php File 8728 bytes April 30 2024 19:35:34.
class-wc-order-item-coupon.php File 4175 bytes December 22 2021 00:24:58.
class-wc-order-item-fee.php File 9431 bytes March 03 2025 22:28:12.
class-wc-order-item-meta.php File 5942 bytes December 22 2021 00:24:58.
class-wc-order-item-product.php File 16221 bytes May 12 2025 21:07:28.
class-wc-order-item-shipping.php File 9013 bytes May 12 2025 21:07:28.
class-wc-order-item-tax.php File 6644 bytes December 22 2021 00:24:58.
class-wc-order-item.php File 18990 bytes May 12 2025 21:07:28.
class-wc-order-query.php File 2615 bytes July 28 2021 04:11:34.
class-wc-order-refund.php File 6135 bytes May 12 2025 21:07:28.
class-wc-order.php File 76529 bytes June 23 2025 19:46:28.
class-wc-payment-gateways.php File 16110 bytes June 30 2025 17:49:22.
class-wc-payment-tokens.php File 6390 bytes November 23 2022 05:58:58.
class-wc-post-data.php File 22246 bytes March 03 2025 22:28:12.
class-wc-post-types.php File 32771 bytes May 12 2025 21:07:28.
class-wc-privacy-background-process.php File 1833 bytes March 03 2025 22:28:12.
class-wc-privacy-erasers.php File 13935 bytes September 23 2024 20:44:04.
class-wc-privacy-exporters.php File 15044 bytes July 28 2021 04:11:34.
class-wc-privacy.php File 17629 bytes June 23 2025 19:46:28.
class-wc-product-attribute.php File 7137 bytes January 19 2022 02:24:34.
class-wc-product-download.php File 12547 bytes April 10 2024 16:54:10.
class-wc-product-external.php File 5104 bytes March 03 2025 22:28:12.
class-wc-product-factory.php File 3974 bytes January 21 2025 18:53:44.
class-wc-product-grouped.php File 5737 bytes May 12 2025 21:07:28.
class-wc-product-query.php File 2332 bytes January 21 2025 18:53:44.
class-wc-product-simple.php File 2762 bytes January 21 2025 18:53:44.
class-wc-product-variable.php File 25166 bytes June 02 2025 15:59:32.
class-wc-product-variation.php File 20661 bytes May 12 2025 21:07:28.
class-wc-query.php File 34161 bytes May 12 2025 21:07:28.
class-wc-rate-limiter.php File 4100 bytes December 01 2021 04:23:30.
class-wc-regenerate-images-request.php File 7923 bytes January 25 2023 03:19:12.
class-wc-regenerate-images.php File 15806 bytes June 25 2024 21:17:40.
class-wc-register-wp-admin-settings.php File 5171 bytes June 22 2021 15:24:06.
class-wc-rest-authentication.php File 22068 bytes June 25 2024 21:17:40.
class-wc-rest-exception.php File 276 bytes September 23 2020 01:16:50.
class-wc-session-handler.php File 21358 bytes July 14 2025 13:28:08.
class-wc-shipping-rate.php File 9566 bytes June 23 2025 19:46:28.
class-wc-shipping-zone.php File 13392 bytes September 23 2020 01:16:50.
class-wc-shipping-zones.php File 4106 bytes August 20 2020 23:18:50.
class-wc-shipping.php File 13160 bytes May 12 2025 21:07:28.
class-wc-shortcodes.php File 19274 bytes January 21 2025 18:53:44.
class-wc-structured-data.php File 24367 bytes March 03 2025 22:28:12.
class-wc-tax.php File 37969 bytes June 20 2023 23:45:50.
class-wc-template-loader.php File 21893 bytes June 09 2025 15:55:46.
class-wc-tracker.php File 50557 bytes June 23 2025 19:46:28.
class-wc-validation.php File 5929 bytes May 28 2024 14:28:20.
class-wc-webhook.php File 30111 bytes December 18 2024 22:19:16.
class-woocommerce.php File 51138 bytes July 23 2025 12:38:10.
wc-account-functions.php File 14449 bytes June 23 2025 19:46:28.
wc-attribute-functions.php File 21687 bytes January 21 2025 18:53:44.
wc-brands-functions.php File 4270 bytes September 23 2024 20:44:04.
wc-cart-functions.php File 21080 bytes June 30 2025 17:49:22.
wc-conditional-functions.php File 14916 bytes June 23 2025 19:46:28.
wc-core-functions.php File 88756 bytes June 30 2025 17:49:22.
wc-coupon-functions.php File 3169 bytes May 12 2025 21:07:28.
wc-deprecated-functions.php File 39030 bytes May 12 2025 21:07:28.
wc-formatting-functions.php File 50031 bytes June 30 2025 17:49:22.
wc-notice-functions.php File 8277 bytes June 23 2025 19:46:28.
wc-order-functions.php File 41609 bytes June 23 2025 19:46:28.
wc-order-item-functions.php File 5153 bytes January 25 2023 03:19:12.
wc-order-step-logger-functions.php File 5135 bytes May 12 2025 21:07:28.
wc-page-functions.php File 9657 bytes September 23 2024 20:44:04.
wc-product-functions.php File 59920 bytes June 23 2025 19:46:28.
wc-rest-functions.php File 14176 bytes June 23 2025 19:46:28.
wc-stock-functions.php File 17544 bytes January 21 2025 18:53:44.
wc-template-functions.php File 135937 bytes June 23 2025 19:46:28.
wc-template-hooks.php File 12957 bytes May 12 2025 21:07:28.
wc-term-functions.php File 24381 bytes June 16 2025 19:21:28.
wc-update-functions.php File 95221 bytes June 23 2025 19:46:28.
wc-user-functions.php File 35023 bytes June 23 2025 19:46:28.
wc-webhook-functions.php File 5905 bytes June 25 2024 21:17:40.
wc-widget-functions.php File 2063 bytes August 20 2020 23:18:50.

Reading File: /home/codekrsu//ameliagraphics.com/wp-content/plugins/woocommerce/includes//class-wc-privacy.php

<?php
/**
 * Privacy/GDPR related functionality which ties into WordPress functionality.
 *
 * @since 3.4.0
 * @package WooCommerce\Classes
 */

use Automattic\WooCommerce\Enums\OrderInternalStatus;

defined( 'ABSPATH' ) || exit;

if ( ! class_exists( 'WC_Privacy_Background_Process', false ) ) {
	include_once __DIR__ . '/class-wc-privacy-background-process.php';
}

/**
 * WC_Privacy Class.
 */
class WC_Privacy extends WC_Abstract_Privacy {

	/**
	 * Background process to clean up orders.
	 *
	 * @var WC_Privacy_Background_Process
	 */
	protected static $background_process;

	/**
	 * Init - hook into events.
	 */
	public function __construct() {
		parent::__construct();

		// Initialize data exporters and erasers.
		add_action( 'init', array( $this, 'register_erasers_exporters' ) );

		// Cleanup orders daily - this is a callback on a daily cron event.
		add_action( 'woocommerce_cleanup_personal_data', array( $this, 'queue_cleanup_personal_data' ) );

		// Handles custom anonymization types not included in core.
		add_filter( 'wp_privacy_anonymize_data', array( $this, 'anonymize_custom_data_types' ), 10, 3 );

		// When this is fired, data is removed in a given order. Called from bulk actions.
		add_action( 'woocommerce_remove_order_personal_data', array( 'WC_Privacy_Erasers', 'remove_order_personal_data' ) );
	}

	/**
	 * Initial registration of privacy erasers and exporters.
	 *
	 * Due to the use of translation functions, this should run only after plugins loaded.
	 */
	public function register_erasers_exporters() {
		$this->name = __( 'WooCommerce', 'woocommerce' );

		if ( ! self::$background_process ) {
			self::$background_process = new WC_Privacy_Background_Process();
		}

		// Include supporting classes.
		include_once __DIR__ . '/class-wc-privacy-erasers.php';
		include_once __DIR__ . '/class-wc-privacy-exporters.php';

		// This hook registers WooCommerce data exporters.
		$this->add_exporter( 'woocommerce-customer-data', __( 'WooCommerce Customer Data', 'woocommerce' ), array( 'WC_Privacy_Exporters', 'customer_data_exporter' ) );
		$this->add_exporter( 'woocommerce-customer-orders', __( 'WooCommerce Customer Orders', 'woocommerce' ), array( 'WC_Privacy_Exporters', 'order_data_exporter' ) );
		$this->add_exporter( 'woocommerce-customer-downloads', __( 'WooCommerce Customer Downloads', 'woocommerce' ), array( 'WC_Privacy_Exporters', 'download_data_exporter' ) );
		$this->add_exporter( 'woocommerce-customer-tokens', __( 'WooCommerce Customer Payment Tokens', 'woocommerce' ), array( 'WC_Privacy_Exporters', 'customer_tokens_exporter' ) );

		// This hook registers WooCommerce data erasers.
		$this->add_eraser( 'woocommerce-customer-data', __( 'WooCommerce Customer Data', 'woocommerce' ), array( 'WC_Privacy_Erasers', 'customer_data_eraser' ) );
		$this->add_eraser( 'woocommerce-customer-orders', __( 'WooCommerce Customer Orders', 'woocommerce' ), array( 'WC_Privacy_Erasers', 'order_data_eraser' ) );
		$this->add_eraser( 'woocommerce-customer-downloads', __( 'WooCommerce Customer Downloads', 'woocommerce' ), array( 'WC_Privacy_Erasers', 'download_data_eraser' ) );
		$this->add_eraser( 'woocommerce-customer-tokens', __( 'WooCommerce Customer Payment Tokens', 'woocommerce' ), array( 'WC_Privacy_Erasers', 'customer_tokens_eraser' ) );
	}

	/**
	 * Add privacy policy content for the privacy policy page.
	 *
	 * @since 3.4.0
	 */
	public function get_privacy_message() {
		$content = '<div class="wp-suggested-text">' .
			'<p class="privacy-policy-tutorial">' .
				__( 'This sample language includes the basics around what personal data your store may be collecting, storing and sharing, as well as who may have access to that data. Depending on what settings are enabled and which additional plugins are used, the specific information shared by your store will vary. We recommend consulting with a lawyer when deciding what information to disclose on your privacy policy.', 'woocommerce' ) .
			'</p>' .
			'<p>' . __( 'We collect information about you during the checkout process on our store.', 'woocommerce' ) . '</p>' .
			'<h2>' . __( 'What we collect and store', 'woocommerce' ) . '</h2>' .
			'<p>' . __( 'While you visit our site, we’ll track:', 'woocommerce' ) . '</p>' .
			'<ul>' .
				'<li>' . __( 'Products you’ve viewed: we’ll use this to, for example, show you products you’ve recently viewed', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Location, IP address and browser type: we’ll use this for purposes like estimating taxes and shipping', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Shipping address: we’ll ask you to enter this so we can, for instance, estimate shipping before you place an order, and send you the order!', 'woocommerce' ) . '</li>' .
			'</ul>' .
			'<p>' . __( 'We’ll also use cookies to keep track of cart contents while you’re browsing our site.', 'woocommerce' ) . '</p>' .
			'<p class="privacy-policy-tutorial">' .
				__( 'Note: you may want to further detail your cookie policy, and link to that section from here.', 'woocommerce' ) .
			'</p>' .
			'<p>' . __( 'When you purchase from us, we’ll ask you to provide information including your name, billing address, shipping address, email address, phone number, credit card/payment details and optional account information like username and password. We’ll use this information for purposes, such as, to:', 'woocommerce' ) . '</p>' .
			'<ul>' .
				'<li>' . __( 'Send you information about your account and order', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Respond to your requests, including refunds and complaints', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Process payments and prevent fraud', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Set up your account for our store', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Comply with any legal obligations we have, such as calculating taxes', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Improve our store offerings', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Send you marketing messages, if you choose to receive them', 'woocommerce' ) . '</li>' .
			'</ul>' .
			'<p>' . __( 'If you create an account, we will store your name, address, email and phone number, which will be used to populate the checkout for future orders.', 'woocommerce' ) . '</p>' .
			'<p>' . __( 'We generally store information about you for as long as we need the information for the purposes for which we collect and use it, and we are not legally required to continue to keep it. For example, we will store order information for XXX years for tax and accounting purposes. This includes your name, email address and billing and shipping addresses.', 'woocommerce' ) . '</p>' .
			'<p>' . __( 'We will also store comments or reviews, if you choose to leave them.', 'woocommerce' ) . '</p>' .
			'<h2>' . __( 'Who on our team has access', 'woocommerce' ) . '</h2>' .
			'<p>' . __( 'Members of our team have access to the information you provide us. For example, both Administrators and Shop Managers can access:', 'woocommerce' ) . '</p>' .
			'<ul>' .
				'<li>' . __( 'Order information like what was purchased, when it was purchased and where it should be sent, and', 'woocommerce' ) . '</li>' .
				'<li>' . __( 'Customer information like your name, email address, and billing and shipping information.', 'woocommerce' ) . '</li>' .
			'</ul>' .
			'<p>' . __( 'Our team members have access to this information to help fulfill orders, process refunds and support you.', 'woocommerce' ) . '</p>' .
			'<h2>' . __( 'What we share with others', 'woocommerce' ) . '</h2>' .
			'<p class="privacy-policy-tutorial">' .
				__( 'In this section you should list who you’re sharing data with, and for what purpose. This could include, but may not be limited to, analytics, marketing, payment gateways, shipping providers, and third party embeds.', 'woocommerce' ) .
			'</p>' .
			'<p>' . __( 'We share information with third parties who help us provide our orders and store services to you; for example --', 'woocommerce' ) . '</p>' .
			'<h3>' . __( 'Payments', 'woocommerce' ) . '</h3>' .
			'<p class="privacy-policy-tutorial">' .
				__( 'In this subsection you should list which third party payment processors you’re using to take payments on your store since these may handle customer data. We’ve included PayPal as an example, but you should remove this if you’re not using PayPal.', 'woocommerce' ) .
			'</p>' .
			'<p>' . __( 'We accept payments through PayPal. When processing payments, some of your data will be passed to PayPal, including information required to process or support the payment, such as the purchase total and billing information.', 'woocommerce' ) . '</p>' .
			'<p>' . __( 'Please see the <a href="https://www.paypal.com/us/webapps/mpp/ua/privacy-full">PayPal Privacy Policy</a> for more details.', 'woocommerce' ) . '</p>' .
			'</div>';

		return apply_filters( 'wc_privacy_policy_content', $content );
	}

	/**
	 * Spawn events for order cleanup.
	 */
	public function queue_cleanup_personal_data() {
		self::$background_process->push_to_queue( array( 'task' => 'trash_pending_orders' ) );
		self::$background_process->push_to_queue( array( 'task' => 'trash_failed_orders' ) );
		self::$background_process->push_to_queue( array( 'task' => 'trash_cancelled_orders' ) );
		self::$background_process->push_to_queue( array( 'task' => 'anonymize_refunded_orders' ) );
		self::$background_process->push_to_queue( array( 'task' => 'anonymize_completed_orders' ) );
		self::$background_process->push_to_queue( array( 'task' => 'delete_inactive_accounts' ) );
		self::$background_process->save()->dispatch();
	}

	/**
	 * Handle some custom types of data and anonymize them.
	 *
	 * @param string $anonymous Anonymized string.
	 * @param string $type Type of data.
	 * @param string $data The data being anonymized.
	 * @return string Anonymized string.
	 */
	public function anonymize_custom_data_types( $anonymous, $type, $data ) {
		switch ( $type ) {
			case 'address_state':
			case 'address_country':
				$anonymous = ''; // Empty string - we don't want to store anything after removal.
				break;
			case 'phone':
				$anonymous = preg_replace( '/\d/u', '0', $data );
				break;
			case 'numeric_id':
				$anonymous = 0;
				break;
		}
		return $anonymous;
	}

	/**
	 * Find and trash old orders.
	 *
	 * @since 3.4.0
	 * @param  int $limit Limit orders to process per batch.
	 * @return int Number of orders processed.
	 */
	public static function trash_pending_orders( $limit = 20 ) {
		$option = wc_parse_relative_date_option( get_option( 'woocommerce_trash_pending_orders' ) );

		if ( empty( $option['number'] ) ) {
			return 0;
		}

		return self::trash_orders_query(
			apply_filters(
				'woocommerce_trash_pending_orders_query_args',
				array(
					'date_created' => '<' . strtotime( '-' . $option['number'] . ' ' . $option['unit'] ),
					'limit'        => $limit, // Batches of 20.
					'status'       => OrderInternalStatus::PENDING,
					'type'         => 'shop_order',
				)
			)
		);
	}

	/**
	 * Find and trash old orders.
	 *
	 * @since 3.4.0
	 * @param  int $limit Limit orders to process per batch.
	 * @return int Number of orders processed.
	 */
	public static function trash_failed_orders( $limit = 20 ) {
		$option = wc_parse_relative_date_option( get_option( 'woocommerce_trash_failed_orders' ) );

		if ( empty( $option['number'] ) ) {
			return 0;
		}

		return self::trash_orders_query(
			apply_filters(
				'woocommerce_trash_failed_orders_query_args',
				array(
					'date_created' => '<' . strtotime( '-' . $option['number'] . ' ' . $option['unit'] ),
					'limit'        => $limit, // Batches of 20.
					'status'       => OrderInternalStatus::FAILED,
					'type'         => 'shop_order',
				)
			)
		);
	}

	/**
	 * Find and trash old orders.
	 *
	 * @since 3.4.0
	 * @param  int $limit Limit orders to process per batch.
	 * @return int Number of orders processed.
	 */
	public static function trash_cancelled_orders( $limit = 20 ) {
		$option = wc_parse_relative_date_option( get_option( 'woocommerce_trash_cancelled_orders' ) );

		if ( empty( $option['number'] ) ) {
			return 0;
		}

		return self::trash_orders_query(
			apply_filters(
				'woocommerce_trash_cancelled_orders_query_args',
				array(
					'date_created' => '<' . strtotime( '-' . $option['number'] . ' ' . $option['unit'] ),
					'limit'        => $limit, // Batches of 20.
					'status'       => OrderInternalStatus::CANCELLED,
					'type'         => 'shop_order',
				)
			)
		);
	}

	/**
	 * Find and Anonymize refunded orders.
	 *
	 * @since 9.8.0
	 * @param  int $limit Limit orders to process per batch.
	 * @return int Number of orders processed.
	 */
	public static function anonymize_refunded_orders( $limit = 20 ) {
		$option = wc_parse_relative_date_option( get_option( 'woocommerce_anonymize_refunded_orders' ) );

		if ( empty( $option['number'] ) ) {
			return 0;
		}

		return self::anonymize_orders_query(
			/**
			 * Filter to modify the query arguments for anonymizing refunded orders.
			 *
			 * @since 9.8.0
			 *
			 * @param string $date_created The date before which orders should be anonymized.
			 * @param int    $limit The maximum number of orders to process in each batch.
			 * @param string $status The status of the orders to be anonymized.
			 * @param string $type The type of orders to be anonymized.
			 */
			apply_filters(
				'woocommerce_anonymize_refunded_orders_query_args',
				array(
					'date_created' => '<' . strtotime( '-' . $option['number'] . ' ' . $option['unit'] ),
					'limit'        => $limit, // Batches of 20.
					'status'       => OrderInternalStatus::REFUNDED,
					'type'         => 'shop_order',
					'anonymized'   => false,
				)
			)
		);
	}

	/**
	 * For a given query trash all matches.
	 *
	 * @since 3.4.0
	 * @param array $query Query array to pass to wc_get_orders().
	 * @return int Count of orders that were trashed.
	 */
	protected static function trash_orders_query( $query ) {
		$orders = wc_get_orders( $query );
		$count  = 0;

		if ( $orders ) {
			foreach ( $orders as $order ) {
				$order->delete( false );
				++$count;
			}
		}

		return $count;
	}

	/**
	 * Anonymize old completed orders.
	 *
	 * @since 3.4.0
	 * @param  int $limit Limit orders to process per batch.
	 * @return int Number of orders processed.
	 */
	public static function anonymize_completed_orders( $limit = 20 ) {
		$option = wc_parse_relative_date_option( get_option( 'woocommerce_anonymize_completed_orders' ) );

		if ( empty( $option['number'] ) ) {
			return 0;
		}

		return self::anonymize_orders_query(
			apply_filters(
				'woocommerce_anonymize_completed_orders_query_args',
				array(
					'date_created' => '<' . strtotime( '-' . $option['number'] . ' ' . $option['unit'] ),
					'limit'        => $limit, // Batches of 20.
					'status'       => OrderInternalStatus::COMPLETED,
					'anonymized'   => false,
					'type'         => 'shop_order',
				)
			)
		);
	}

	/**
	 * For a given query, anonymize all matches.
	 *
	 * @since 3.4.0
	 * @param array $query Query array to pass to wc_get_orders().
	 * @return int Count of orders that were anonymized.
	 */
	protected static function anonymize_orders_query( $query ) {
		$orders = wc_get_orders( $query );
		$count  = 0;

		if ( $orders ) {
			foreach ( $orders as $order ) {
				WC_Privacy_Erasers::remove_order_personal_data( $order );
				++$count;
			}
		}

		return $count;
	}

	/**
	 * Delete inactive accounts.
	 *
	 * @since 3.4.0
	 * @param  int $limit Limit users to process per batch.
	 * @return int Number of users processed.
	 */
	public static function delete_inactive_accounts( $limit = 20 ) {
		$option = wc_parse_relative_date_option( get_option( 'woocommerce_delete_inactive_accounts' ) );

		if ( empty( $option['number'] ) ) {
			return 0;
		}

		return self::delete_inactive_accounts_query( strtotime( '-' . $option['number'] . ' ' . $option['unit'] ), $limit );
	}

	/**
	 * Delete inactive accounts.
	 *
	 * @since 3.4.0
	 * @param int $timestamp Timestamp to delete customers before.
	 * @param int $limit     Limit number of users to delete per run.
	 * @return int Count of customers that were deleted.
	 */
	protected static function delete_inactive_accounts_query( $timestamp, $limit = 20 ) {
		$count      = 0;
		$user_query = new WP_User_Query(
			array(
				'fields'     => 'ID',
				'number'     => $limit,
				'role__in'   => apply_filters(
					'woocommerce_delete_inactive_account_roles',
					array(
						'Customer',
						'Subscriber',
					)
				),
				'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
					'relation' => 'AND',
					array(
						'key'     => 'wc_last_active',
						'value'   => (string) $timestamp,
						'compare' => '<',
						'type'    => 'NUMERIC',
					),
					array(
						'key'     => 'wc_last_active',
						'value'   => '0',
						'compare' => '>',
						'type'    => 'NUMERIC',
					),
				),
			)
		);

		$user_ids = $user_query->get_results();

		if ( $user_ids ) {
			if ( ! function_exists( 'wp_delete_user' ) ) {
				require_once ABSPATH . 'wp-admin/includes/user.php';
			}

			foreach ( $user_ids as $user_id ) {
				wp_delete_user( $user_id, 0 );
				wc_get_logger()->info(
					sprintf(
						/* translators: %d user ID. */
						__( "User #%d was deleted by WooCommerce in accordance with the site's personal data retention settings. Any content belonging to that user has been retained but unassigned.", 'woocommerce' ),
						$user_id
					)
				);
				++$count;
			}
		}

		return $count;
	}
}

new WC_Privacy();

SILENT KILLER Tool