$name, 'available' => $available, ); if (!tinv_get_option('integrations', $slug)) { return; } if (!$available) { return; } if (!function_exists('tinv_wishlist_item_meta_uni_woo_custom_product_options')) { /** * Set description for meta Product Options and Price Calculation Formulas for WooCommerce – Uni CPO * * @param array $meta Meta array. * @param array $wl_product Wishlist Product. * @param \WC_Product $product Woocommerce Product. * * @return array */ function tinv_wishlist_item_meta_uni_woo_custom_product_options($item_data, $product_id, $variation_id) { if (class_exists('Uni_Cpo')) { foreach (array_keys($item_data) as $key) { if (strpos($key, 'cpo_') === 0) { unset($item_data[$key]); } } if (!empty($item_data)) { $options_eval_result = []; $form_data = array(); $formatted_vars = array(); $variables = array(); $product_data = Uni_Cpo_Product::get_product_data_by_id($product_id); foreach ($item_data as $key => $value) { $form_data[$key] = $value['display']; } array_walk( $options_eval_result, function ($v) use (&$variables, &$formatted_vars, &$nice_names_vars) { foreach ($v as $slug => $value) { // prepare $variables for calculation purpose $variables['{' . $slug . '}'] = $value['calc']; // prepare $formatted_vars for conditional logic purpose $formatted_vars[$slug] = $value['cart_meta']; } } ); // non option variables if ('on' === $product_data['nov_data']['nov_enable'] && !empty($product_data['nov_data']['nov']) ) { $variables = uni_cpo_process_formula_with_non_option_vars($variables, $product_data, $formatted_vars); } $filtered_form_data = array_filter($form_data, function ($k) use ($form_data) { return false !== strpos($k, UniCpo()->get_var_slug()) && !empty($form_data[$k]); }, ARRAY_FILTER_USE_KEY); if (!empty($filtered_form_data)) { $posts = uni_cpo_get_posts_by_slugs(array_keys($filtered_form_data)); if (!empty($posts)) { $posts_ids = wp_list_pluck($posts, 'ID'); foreach ($posts_ids as $post_id) { $option = uni_cpo_get_option($post_id); if (is_object($option)) { $calculate_result = $option->calculate($filtered_form_data); if (is_array($calculate_result) && isset($calculate_result[$option->get_slug()])) { if (is_array($calculate_result[$option->get_slug()]['order_meta'])) { $calculate_result[$option->get_slug()]['order_meta'] = array_map(function ($item) { if (!is_numeric($item)) { return esc_html__($item); } else { return $item; } }, $calculate_result[$option->get_slug()]['order_meta']); $display_value = implode(', ', $calculate_result[$option->get_slug()]['order_meta']); } else { if (!is_numeric($calculate_result[$option->get_slug()]['order_meta'])) { $display_value = esc_html__($calculate_result[$option->get_slug()]['order_meta']); } else { $display_value = $calculate_result[$option->get_slug()]['order_meta']; } } $display_key = uni_cpo_sanitize_label($option->cpo_order_label()); $display_value = uni_cpo_replace_curly( $display_value, $formatted_vars, $product_data, $variables ); $display_value = uni_cpo_get_proper_option_label_cart($display_value); $display_key = uni_cpo_replace_curly( $display_key, $formatted_vars, $product_data, $variables ); $display_key = trim($display_key, ' '); $display_key = uni_cpo_get_proper_option_label_cart($display_key); $item_data[$option->get_slug()]['display'] = $display_value; } $item_data[$option->get_slug()]['key'] = $display_key; } } } } } } return $item_data; } add_filter('tinvwl_wishlist_item_meta_post', 'tinv_wishlist_item_meta_uni_woo_custom_product_options', 10, 3); } if (!function_exists('tinvwl_item_price_uni_woo_custom_product_options')) { /** * Modify price for Product Options and Price Calculation Formulas for WooCommerce – Uni CPO. * * @param string $price Returned price. * @param array $wl_product Wishlist Product. * @param \WC_Product $product Woocommerce Product. * * @return string */ function tinvwl_item_price_uni_woo_custom_product_options($price, $wl_product, $product) { if (class_exists('Uni_Cpo')) { $product_data = Uni_Cpo_Product::get_product_data_by_id($product->get_id()); if ('on' === $product_data['settings_data']['calc_enable']) { $form_data = $wl_product['meta']; $options_eval_result = array(); $variables = array(); $is_calc_disabled = false; $formatted_vars = array(); $main_formula = $product_data['formula_data']['main_formula']; $filtered_form_data = array_filter($form_data, function ($k) use ($form_data) { return false !== strpos($k, UniCpo()->get_var_slug()) && !empty($form_data[$k]); }, ARRAY_FILTER_USE_KEY); if (!empty($filtered_form_data)) { $posts = uni_cpo_get_posts_by_slugs(array_keys($filtered_form_data)); if (!empty($posts)) { $posts_ids = wp_list_pluck($posts, 'ID'); foreach ($posts_ids as $post_id) { $option = uni_cpo_get_option($post_id); if (is_object($option)) { $calculate_result = $option->calculate($filtered_form_data); if (!empty($calculate_result)) { $options_eval_result[$option->get_slug()] = $calculate_result; } } } } } array_walk($options_eval_result, function ($v) use (&$variables, &$formatted_vars) { foreach ($v as $slug => $value) { // prepare $variables for calculation purpose $variables['{' . $slug . '}'] = $value['calc']; // prepare $formatted_vars for conditional logic purpose $formatted_vars[$slug] = $value['cart_meta']; } }); $variables['{uni_cpo_price}'] = $product->get_price('edit'); // non option variables if ('on' === $product_data['nov_data']['nov_enable'] && !empty($product_data['nov_data']['nov'])) { $variables = uni_cpo_process_formula_with_non_option_vars($variables, $product_data, $formatted_vars); } // formula conditional logic if ('on' === $product_data['formula_data']['rules_enable'] && !empty($product_data['formula_data']['formula_scheme']) && is_array($product_data['formula_data']['formula_scheme'])) { $conditional_formula = uni_cpo_process_formula_scheme($formatted_vars, $product_data); if ($conditional_formula) { $main_formula = $conditional_formula; } } if ('disable' === $main_formula) { $is_calc_disabled = true; } // if (!$is_calc_disabled) { $main_formula = uni_cpo_process_formula_with_vars($main_formula, $variables); // calculates formula $price_calculated = uni_cpo_calculate_formula($main_formula); $price_min = $product_data['settings_data']['min_price']; $price_max = $product_data['settings_data']['max_price']; // check for min price if ($price_calculated < $price_min) { $price_calculated = $price_min; } // check for max price if (!empty($price_max) && $price_calculated >= $price_max) { $is_calc_disabled = true; } if (true !== $is_calc_disabled) { // filter, so 3rd party scripts can hook up $price_calculated = apply_filters( 'uni_cpo_in_cart_calculated_price', $price_calculated, $product, $filtered_form_data ); return wc_price($price_calculated); } else { return wc_price($price_max); } } else { return wc_price(0); } } } return $price; } add_filter('tinvwl_wishlist_item_price', 'tinvwl_item_price_uni_woo_custom_product_options', 10, 3); } // End if().