Name. * * @since 2.0.0 * @return array */ function wu_get_plans_as_options() { $options = array(); foreach (wu_get_plans() as $plan) { $options[$plan->get_id()] = $plan->get_name(); } // end foreach; return $options; } // end wu_get_plans_as_options; /** * Returns a product based on slug. * * @since 2.0.0 * * @param string $product_slug The slug of the product. * @return Product|false */ function wu_get_product_by_slug($product_slug) { return Product::get_by('slug', $product_slug); } // end wu_get_product_by_slug; /** * Returns a single product defined by a particular column and value. * * @since 2.0.0 * * @param string $column The column name. * @param mixed $value The column value. * @return \WP_Ultimo\Models\Product|false */ function wu_get_product_by($column, $value) { return Product::get_by($column, $value); } // end wu_get_product_by; /** * Creates a new product. * * @since 2.0.0 * * @param array $product_data Product data. * @return Product|\WP_Error */ function wu_create_product($product_data) { $product_data = wp_parse_args($product_data, array( 'name' => false, 'description' => false, 'currency' => false, 'pricing_type' => false, 'setup_fee' => false, 'parent_id' => 0, 'slug' => false, 'recurring' => false, 'trial_duration' => 0, 'trial_duration_unit' => 'day', 'duration' => 1, 'duration_unit' => 'day', 'amount' => false, 'billing_cycles' => false, 'active' => false, 'type' => false, 'featured_image_id' => 0, 'list_order' => 0, 'date_created' => wu_get_current_time('mysql', true), 'date_modified' => wu_get_current_time('mysql', true), 'migrated_from_id' => 0, 'meta' => array(), 'available_addons' => array(), 'group' => '', )); $product = new Product($product_data); $saved = $product->save(); return is_wp_error($saved) ? $saved : $product; } // end wu_create_product; /** * Returns a list of available product groups. * * @since 2.0.0 */ function wu_get_product_groups(): array { global $wpdb; $query = "SELECT DISTINCT `product_group` FROM {$wpdb->base_prefix}wu_products WHERE `product_group` <> ''"; $results = array_column($wpdb->get_results($query, ARRAY_A), 'product_group'); // phpcs:ignore return array_combine($results, $results); } // end wu_get_product_groups; /** * Takes a list of product objects and separates them into plan and addons. * * @since 2.0.0 * * @param Product[] $products List of products. * @return array first element is the first plan found, the second is an array with all the other products. */ function wu_segregate_products($products) { $results = array(false, array()); foreach ($products as $product) { if (is_a($product, Product::class) === false) { $product = wu_get_product($product); if (!$product) { continue; } // end if; } // end if; if ($product->get_type() === 'plan' && $results[0] === false) { $results[0] = $product; } else { $results[1][] = $product; } // end if; } // end foreach; return $results; } // end wu_segregate_products;