SHOW:
|
|
- or go back to the newest paste.
1 | /** | |
2 | * Get products sizes | |
3 | */ | |
4 | - | function bis_get_sizes($continue_import, $post_id, $data, $import_id) { |
4 | + | function bis_get_sizes($continue_import, $post_id, $data, $import_id) { |
5 | - | // Get the product ID & size |
5 | + | $transient_name = "bis_size_{$import_id}"; |
6 | - | $product_id = $data['manufacturer_artno']; |
6 | + | |
7 | - | $product_size = $data['size']; |
7 | + | // Get the product ID & size |
8 | $product_id = $data['manufacturer_artno']; // A field that will be used for SKU | |
9 | - | $sizes = (array) get_transient('bis_sizes'); |
9 | + | $product_size = $data['size']; |
10 | - | $sizes[$product_id][] = $product_size; |
10 | + | |
11 | - | set_transient('bis_sizes', $sizes); |
11 | + | $sizes = (array) get_transient($transient_name); |
12 | $sizes[$product_id][] = $product_size; | |
13 | - | return $continue_import; |
13 | + | set_transient($transient_name, $sizes); |
14 | ||
15 | return $continue_import; | |
16 | } | |
17 | add_filter('wp_all_import_is_post_to_update', 'bis_get_sizes', 10, 4); | |
18 | - | * Reset transient |
18 | + | |
19 | /** | |
20 | - | function bis_reset_sizes() { |
20 | + | |
21 | - | set_transient('bis_sizes', '', 60*60); |
21 | + | |
22 | function bis_save_sizes($import_id) { | |
23 | - | add_action('pmxi_before_xml_import', 'bis_reset_sizes'); |
23 | + | global $wpdb; |
24 | ||
25 | $transient_name = "bis_size_{$import_id}"; | |
26 | $all_sizes = (array) get_transient($transient_name); | |
27 | $taxonomy = 'pa_size'; | |
28 | - | function bis_save_sizes() { |
28 | + | |
29 | - | $all_sizes = (array) get_transient('bis_sizes'); |
29 | + | // Get products IDs from last import |
30 | - | $taxonomy = 'pa_size'; |
30 | + | $product_ids = $wpdb->get_col("SELECT post_id FROM {$wpdb->prefix}pmxi_posts WHERE import_id = {$import_id}"); |
31 | ||
32 | - | // Remove empty items |
32 | + | // Remove empty items from the array with sizes |
33 | - | $all_sizes = array_filter($all_sizes); |
33 | + | $all_sizes = array_filter($all_sizes); |
34 | ||
35 | - | if(!empty($all_sizes)) { |
35 | + | if(!empty($all_sizes)) { |
36 | - | foreach($all_sizes as $sku => $product_sizes) { |
36 | + | foreach($all_sizes as $sku => $product_sizes) { |
37 | - | $product_id = wc_get_product_id_by_sku($sku); |
37 | + | // Find the product with exact SKU in the imported products list |
38 | - | $product_terms = array(); |
38 | + | $product_id = $wpdb->get_var(sprintf("SELECT p.ID FROM {$wpdb->posts} AS p LEFT JOIN {$wpdb->postmeta} AS pm ON (p.ID = pm.post_ID) WHERE p.ID IN (%s) AND pm.meta_key = '_sku' AND pm.meta_value = '%s'", implode(", ", $product_ids), $sku)); |
39 | - | |
39 | + | |
40 | - | // Add product sizes again |
40 | + | // Add product sizes again to the product |
41 | - | foreach($product_sizes as $product_size) { |
41 | + | if(!empty($product_id)) { |
42 | - | $term = term_exists((string) $product_size, $taxonomy); |
42 | + | $product_terms = array(); |
43 | ||
44 | - | if(empty($term)) { |
44 | + | foreach($product_sizes as $product_size) { |
45 | - | $term = wp_insert_term((string) $product_size, $taxonomy); |
45 | + | $term = term_exists((string) $product_size, $taxonomy); |
46 | ||
47 | if(empty($term)) { | |
48 | - | $product_terms[] = (int) $term['term_id']; |
48 | + | $term = wp_insert_term((string) $product_size, $taxonomy); |
49 | } | |
50 | - | |
50 | + | |
51 | - | wp_set_post_terms($product_id, $product_terms, $taxonomy); |
51 | + | $product_terms[] = (int) $term['term_id']; |
52 | - | } |
52 | + | |
53 | - | } |
53 | + | |
54 | wp_set_post_terms((int) $product_id, $product_terms, $taxonomy); | |
55 | } | |
56 | } | |
57 | } | |
58 | - | if(isset($_GET['test'])) { |
58 | + | |
59 | - | bis_save_sizes(); |
59 | + | |
60 | - | die(); |
60 | + | |
61 | - | } |
61 | + | |
62 | if(isset($_GET['test']) && is_numeric($_GET['test'])) { | |
63 | $import_id = (int) $_GET['test']; | |
64 | ||
65 | bis_save_sizes($import_id); | |
66 | ||
67 | $transient_name = "bis_size_{$import_id}"; | |
68 | $all_sizes = get_transient($transient_name); | |
69 | print_r($all_sizes); | |
70 | die(); | |
71 | } | |
72 | }); |