function woocommerce_duplicate_product($new_id, $post) { global $sitepress, $wpdb; //duplicate original first $trid = $sitepress->get_element_trid($post->ID, 'post_' . $post->post_type); $orig_id = $sitepress->get_original_element_id_by_trid($trid); $orig_lang = $this->get_original_product_language($post->ID); $wc_admin = new WC_Admin_Duplicate_Product(); if ($orig_id == $post->ID) { $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, false, $orig_lang); $new_trid = $sitepress->get_element_trid($new_id, 'post_' . $post->post_type); $new_orig_id = $new_id; } else { $post_to_duplicate = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID=%d", $orig_id)); if (!empty($post_to_duplicate)) { $new_orig_id = $wc_admin->duplicate_product($post_to_duplicate); do_action('wcml_after_duplicate_product', $new_id, $post_to_duplicate); $sitepress->set_element_language_details($new_orig_id, 'post_' . $post->post_type, false, $orig_lang); $new_trid = $sitepress->get_element_trid($new_orig_id, 'post_' . $post->post_type); update_post_meta($new_id, '_icl_lang_duplicate_of', $new_orig_id); $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, $new_trid, $sitepress->get_current_language()); } } $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type); if ($translations) { foreach ($translations as $translation) { if (!$translation->original && $translation->element_id != $post->ID) { $post_to_duplicate = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID=%d", $translation->element_id)); if (!empty($post_to_duplicate)) { $new_id = $wc_admin->duplicate_product($post_to_duplicate); $new_id_obj = get_post($new_id); $new_slug = wp_unique_post_slug(sanitize_title($new_id_obj->post_title), $new_id, $post_to_duplicate->post_status, $post_to_duplicate->post_type, $new_id_obj->post_parent); $wpdb->update($wpdb->posts, array('post_name' => $new_slug), array('ID' => $new_id)); do_action('wcml_after_duplicate_product', $new_id, $post_to_duplicate); $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, $new_trid, $translation->language_code); update_post_meta($new_id, '_icl_lang_duplicate_of', $new_orig_id); } } } } }
function woocommerce_duplicate_product($new_id, $post) { global $sitepress, $wpdb; $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, false, $sitepress->get_current_language()); $new_trid = $sitepress->get_element_trid($new_id, 'post_' . $post->post_type); $trid = $sitepress->get_element_trid($post->ID, 'post_' . $post->post_type); $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type); if ($translations) { $wc_admin = new WC_Admin_Duplicate_Product(); foreach ($translations as $translation) { if ($translation->element_id != $post->ID) { $post_to_duplicate = $wpdb->get_row("SELECT * FROM {$wpdb->posts} WHERE ID={$translation->element_id}"); if (!empty($post_to_duplicate)) { $new_id = $wc_admin->duplicate_product($post_to_duplicate); $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, $new_trid, $translation->language_code); } } } } }
function woocommerce_duplicate_product($new_id, $post) { global $sitepress, $wpdb; //duplicate original first $trid = $sitepress->get_element_trid($post->ID, 'post_' . $post->post_type); $orig_id = $sitepress->get_original_element_id_by_trid($trid); $orig_lang = $this->get_original_product_language($post->ID); $wc_admin = new WC_Admin_Duplicate_Product(); if ($orig_id == $post->ID) { $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, false, $orig_lang); $new_trid = $sitepress->get_element_trid($new_id, 'post_' . $post->post_type); } else { $post_to_duplicate = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID=%d", $orig_id)); if (!empty($post_to_duplicate)) { $new_orig_id = $wc_admin->duplicate_product($post_to_duplicate); do_action('wcml_after_duplicate_product', $new_id, $post_to_duplicate); $sitepress->set_element_language_details($new_orig_id, 'post_' . $post->post_type, false, $orig_lang); $new_trid = $sitepress->get_element_trid($new_orig_id, 'post_' . $post->post_type); $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, $new_trid, $sitepress->get_current_language()); } } $translations = $sitepress->get_element_translations($trid, 'post_' . $post->post_type); if ($translations) { foreach ($translations as $translation) { if (!$translation->original && $translation->element_id != $post->ID) { $post_to_duplicate = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->posts} WHERE ID=%d", $translation->element_id)); if (!empty($post_to_duplicate)) { $new_id = $wc_admin->duplicate_product($post_to_duplicate); do_action('wcml_after_duplicate_product', $new_id, $post_to_duplicate); $sitepress->set_element_language_details($new_id, 'post_' . $post->post_type, $new_trid, $translation->language_code); } } } } }
public function duplicate_product($new_id, $post) { if (class_exists('WC_Admin_Duplicate_Product')) { $dup = new WC_Admin_Duplicate_Product(); if ($children_products = get_children('post_parent=' . $post->ID . '&post_type=' . TM_EPO_LOCAL_POST_TYPE)) { if ($children_products) { $new_rules_ids = array(); foreach ($children_products as $child) { $new_rules_ids[] = $dup->duplicate_product($this->get_product_to_duplicate($child->ID), $new_id, $child->post_status); } $new_rules_ids = array_filter($new_rules_ids); if (!empty($new_rules_ids)) { $children_products = get_children('post_parent=' . $post->ID . '&post_type=product_variation&order=ASC'); if ($children_products) { $old_variations_ids = array(); foreach ($children_products as $child) { $old_variations_ids[$child->menu_order] = $child->ID; } $old_variations_ids = array_filter($old_variations_ids); $children_products = get_children('post_parent=' . $new_id . '&post_type=product_variation&order=ASC'); if ($children_products) { $new_variations_ids = array(); foreach ($children_products as $child) { $new_variations_ids[$child->menu_order] = $child->ID; } $new_variations_ids = array_filter($new_variations_ids); if (!empty($old_variations_ids) && !empty($new_variations_ids)) { foreach ($new_rules_ids as $rule_id) { $_regular_price = get_post_meta($rule_id, '_regular_price', true); /* * $key = attirbute * $k = variation * $v = price */ $new_regular_price = array(); if (is_array($_regular_price)) { foreach ($_regular_price as $key => $value) { if (is_array($value)) { foreach ($value as $k => $v) { if (!isset($new_regular_price[$key])) { $new_regular_price[$key] = array(); } $_new_key = array_search($k, $old_variations_ids); if ($_new_key !== FALSE && $_new_key !== NULL) { $_new_key = $new_variations_ids[$_new_key]; } if ($_new_key !== FALSE && $_new_key !== NULL) { $new_regular_price[$key][$_new_key] = $v; } } } } } update_post_meta($rule_id, '_regular_price', $new_regular_price); } } } } } } } } }