Automattic\WooCommerce\Admin\Features\Fulfillments

FulfillmentsRenderer::get_order_ids_by_shipping_providerprivateWC 10.7.0

Get order IDs that have fulfillments with a specific shipping provider.

Method of the class: FulfillmentsRenderer{}

No Hooks.

Returns

Array. Array of order IDs.

Usage

// private - for code of main (parent) class only
$result = $this->get_order_ids_by_shipping_provider( $shipping_provider ): array;
$shipping_provider(string) (required)
The shipping provider key to filter by.

Changelog

Since 10.7.0 Introduced.

FulfillmentsRenderer::get_order_ids_by_shipping_provider() code WC 10.8.1

private function get_order_ids_by_shipping_provider( string $shipping_provider ): array {
	global $wpdb;

	$fulfillments_table = $wpdb->prefix . 'wc_order_fulfillments';
	$meta_table         = $wpdb->prefix . 'wc_order_fulfillment_meta';

	// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare
	if ( '__other__' === $shipping_provider ) {
		$known_providers = FulfillmentUtils::get_shipping_providers();
		$known_keys      = array_keys( $known_providers );

		if ( empty( $known_keys ) ) {
			$results = $wpdb->get_col(
				$wpdb->prepare(
					"SELECT DISTINCT f.entity_id
					FROM {$fulfillments_table} f
					INNER JOIN {$meta_table} m ON f.fulfillment_id = m.fulfillment_id
					WHERE m.meta_key = %s
					AND m.meta_value IS NOT NULL
					AND m.meta_value != ''
					AND f.date_deleted IS NULL
					AND m.date_deleted IS NULL",
					'_shipment_provider'
				)
			);
		} else {
			$placeholders = implode( ',', array_fill( 0, count( $known_keys ), '%s' ) );
			$results      = $wpdb->get_col(
				$wpdb->prepare(
					"SELECT DISTINCT f.entity_id
					FROM {$fulfillments_table} f
					INNER JOIN {$meta_table} m ON f.fulfillment_id = m.fulfillment_id
					WHERE m.meta_key = '_shipment_provider'
					AND m.meta_value NOT IN ({$placeholders})
					AND m.meta_value IS NOT NULL
					AND m.meta_value != ''
					AND f.date_deleted IS NULL
					AND m.date_deleted IS NULL",
					...array_map( 'wp_json_encode', $known_keys )
				)
			);
		}
	} else {
		$results = $wpdb->get_col(
			$wpdb->prepare(
				"SELECT DISTINCT f.entity_id
				FROM {$fulfillments_table} f
				INNER JOIN {$meta_table} m ON f.fulfillment_id = m.fulfillment_id
				WHERE m.meta_key = '_shipment_provider'
				AND m.meta_value = %s
				AND f.date_deleted IS NULL
				AND m.date_deleted IS NULL",
				wp_json_encode( $shipping_provider )
			)
		);
	}
	// phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared, WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare

	return array_map( 'absint', $results );
}