Automattic\WooCommerce\Admin\Features\Fulfillments
FulfillmentsRenderer::get_order_ids_by_shipping_provider
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() 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 );
}