PluginProbe ʕ •ᴥ•ʔ
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments / 4.5.0
SureCart – Ecommerce Made Easy For Selling Physical Products, Digital Downloads, Subscriptions, Donations, & Payments v4.5.0
4.5.1 4.5.0 4.4.2 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 4.3.0 4.2.3 4.2.2 4.2.1 1.0.3 1.0.4 1.0.5 1.0.6 1.1.0 1.1.1 1.1.10 1.1.11 1.1.12 1.1.13 1.1.14 1.1.15 1.1.16 1.1.17 1.1.18 1.1.19 1.1.2 1.1.3 1.1.4 1.1.5 1.1.6 1.1.7 1.1.8 1.1.9 1.10.0 1.10.1 1.10.2 1.10.3 1.10.4 1.11.0 1.11.1 1.11.2 1.2.0 1.2.1 1.2.2 1.2.3 1.2.4 1.2.5 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.4.0 1.4.1 1.4.2 1.5.0 1.5.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.9.0 1.9.1 1.9.2 1.9.3 1.9.4 1.9.5 2.0.0 2.0.1 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.10.0 2.10.1 2.11.0 2.11.1 2.11.2 2.11.3 2.11.4 2.12.0 2.13.0 2.14.0 2.14.1 2.15.0 2.15.1 2.16.0 2.16.1 2.16.2 2.16.3 2.17.0 2.17.1 2.17.2 2.18.0 2.19.0 2.19.2 2.19.3 2.19.4 2.2.0 2.2.1 2.20.0 2.20.1 2.20.2 2.20.3 2.20.4 2.20.5 2.20.6 2.21.0 2.22.0 2.22.1 2.23.0 2.24.0 2.25.0 2.25.1 2.25.2 2.26.0 2.27.0 2.27.1 2.28.0 2.29.0 2.29.1 2.29.2 2.29.3 2.29.4 2.3.0 2.3.1 2.30.0 2.31.0 2.31.1 2.31.2 2.31.3 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.40.0 2.40.1 2.5.0 2.5.1 2.5.2 2.6.0 2.6.1 2.6.2 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.8.2 2.8.3 2.8.4 2.9.0 3.0.0 3.0.0-RC1 3.0.0-RC2 3.0.0-beta1 3.0.0-beta2 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.1.0 3.1.1 3.1.2 3.1.3 3.1.4 3.1.5 3.1.6 3.10.0 3.10.1 3.11.0 3.12.0 3.13.0 3.13.1 3.13.2 3.13.3 3.13.4 3.14.0 3.15.0 3.15.1 3.15.2 3.15.3 3.15.4 3.15.5 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.16.6 3.16.7 3.16.8 3.17.0 3.17.1 3.17.2 3.17.3 3.17.4 3.17.5 3.17.6 3.18.0 3.19.0 3.19.1 3.19.2 3.2.0 3.2.1 3.2.2 3.20.0 3.20.1 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.4.3 3.5.0 3.5.1 3.5.2 3.5.3 3.6.0 3.6.1 3.6.2 3.7.0 3.7.1 3.7.2 3.7.3 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.9.0 4.0.0 4.0.1 4.0.2 4.0.3 trunk 4.1.0 0.2.19.1 4.1.1 1.0.0 4.2.0 1.0.1 1.0.2
surecart / app / src / Sync / WooCommerce / WooCommerceImportJob.php
surecart / app / src / Sync / WooCommerce Last commit date
WooCommerceImportCleanupService.php 2 months ago WooCommerceImportJob.php 2 months ago WooCommerceImportService.php 2 weeks ago WooCommerceImportTask.php 2 months ago WooCommerceProductMapper.php 2 months ago
WooCommerceImportJob.php
112 lines
1 <?php
2
3 namespace SureCart\Sync\WooCommerce;
4
5 use SureCart\Background\Job;
6
7 /**
8 * Background job that imports WooCommerce products into SureCart.
9 *
10 * Paginates through WC products and dispatches batches of IDs to
11 * WooCommerceImportTask for mapping and API import.
12 *
13 * @package SureCart
14 */
15 class WooCommerceImportJob extends Job {
16
17 /**
18 * The prefix for the action.
19 *
20 * @var string
21 */
22 protected $prefix = 'surecart';
23
24 /**
25 * The action.
26 *
27 * @var string
28 */
29 protected $action = 'woo_import_products';
30
31 /**
32 * Process one page of WooCommerce products.
33 *
34 * Fetches product IDs for the current page and dispatches them
35 * to the task for mapping and API import.
36 *
37 * @param mixed $args Queue item with 'page' and 'batch_size' keys.
38 *
39 * @return mixed Modified args for next page, or false when done.
40 */
41 protected function task( $args ) {
42 $page = $args['page'] ?? 1;
43 $batch_size = max( 1, min( 500, (int) ( $args['batch_size'] ?? 100 ) ) );
44
45 if ( ! class_exists( 'WooCommerce' ) ) {
46 return false;
47 }
48
49 // Cache imported IDs for the duration of this job run to avoid
50 // repeated unbounded get_posts() queries on every page.
51 $cache_key = 'sc_woo_import_excluded_ids';
52 $imported_ids = get_transient( $cache_key );
53
54 if ( false === $imported_ids ) {
55 $imported_ids = get_posts(
56 [
57 'post_type' => 'product',
58 'meta_key' => '_surecart_imported', // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_key
59 'fields' => 'ids',
60 'numberposts' => -1,
61 ]
62 );
63 // Cache for 1 hour — job will complete well within this window.
64 set_transient( $cache_key, $imported_ids, HOUR_IN_SECONDS );
65 }
66
67 $query_args = [
68 'limit' => $batch_size,
69 'page' => $page,
70 'return' => 'ids',
71 'paginate' => true,
72 ];
73
74 if ( ! empty( $imported_ids ) ) {
75 $query_args['exclude'] = $imported_ids;
76 }
77
78 $products = wc_get_products( $query_args );
79
80 // Validate result in case WooCommerce was deactivated mid-sync.
81 if ( ! is_object( $products ) || ! isset( $products->products, $products->max_num_pages ) ) {
82 return false;
83 }
84
85 // Dispatch product IDs to the task for processing.
86 if ( ! empty( $products->products ) ) {
87 $this->task->queue( $products->products );
88 }
89
90 // More pages to process.
91 if ( $products->max_num_pages > $page ) {
92 return [
93 'page' => $page + 1,
94 'batch_size' => $batch_size,
95 ];
96 }
97
98 return false;
99 }
100
101 /**
102 * Complete processing.
103 *
104 * Kicks off the queue immediately to start processing tasks.
105 */
106 protected function complete() {
107 delete_transient( 'sc_woo_import_excluded_ids' );
108 \SureCart::queue()->run();
109 parent::complete();
110 }
111 }
112