@@ -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
157192Academe_Wc_Api_Custom_Meta::initialize ();
0 commit comments