Skip to content

Commit d5dbc4d

Browse files
committed
add support for meta inside product variations
1 parent 0a1c3a4 commit d5dbc4d

File tree

1 file changed

+35
-0
lines changed

1 file changed

+35
-0
lines changed

wc-api-custom-meta.php

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,13 @@ public static function initialize()
8383
2
8484
);
8585
}
86+
// Add a hook to update product variations
87+
add_action(
88+
'woocommerce_api_save_product_variation',
89+
array('Academe_Wc_Api_Custom_Meta', 'updateVariationCustomMeta'),
90+
10,
91+
3
92+
);
8693
}
8794

8895
/**
@@ -109,6 +116,27 @@ public static function fetchCustomMeta($product_data, $product, $fields, $server
109116
$meta = $all_meta;
110117

111118
$product_data['meta'] = $meta;
119+
120+
if(isset($product_data['variations'])) {
121+
foreach($product_data['variations'] as $k => &$variation) {
122+
$variation_id = $variation['id'];
123+
124+
$all_meta = get_post_meta($variation_id);
125+
126+
// Filter out meta we don't want.
127+
$all_meta = array_diff_key($all_meta, array_flip(static::$protected_fields));
128+
129+
// Unserialize the meta field data where necessary.
130+
foreach($all_meta as $key => &$value) {
131+
$value = maybe_unserialize(reset($value));
132+
}
133+
unset($value);
134+
135+
$meta = $all_meta;
136+
137+
$variation['meta'] = $meta;
138+
}
139+
}
112140
}
113141

114142
return $product_data;
@@ -152,6 +180,13 @@ public static function updateCustomMeta($id, $data) {
152180
}
153181
}
154182
}
183+
184+
/**
185+
* Update or create a product variation using above function.
186+
*/
187+
public static function updateVariationCustomMeta($id, $menu_order, $data) {
188+
Academe_Wc_Api_Custom_Meta::updateCustomMeta($id, $data);
189+
}
155190
}
156191

157192
Academe_Wc_Api_Custom_Meta::initialize();

0 commit comments

Comments
 (0)