Name. * * @since 2.0.0 * @return array */ function wu_get_plans_as_options() { $options = []; foreach (wu_get_plans() as $plan) { $options[ $plan->get_id() ] = $plan->get_name(); } return $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); } /** * 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); } /** * 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, [ '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' => [], 'available_addons' => [], 'group' => '', ] ); $product = new Product($product_data); $saved = $product->save(); return is_wp_error($saved) ? $saved : $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); } /** * 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 = [false, []]; foreach ($products as $product) { if (is_a($product, Product::class) === false) { $product = wu_get_product($product); if ( ! $product) { continue; } } if ($product->get_type() === 'plan' && false === $results[0]) { $results[0] = $product; } else { $results[1][] = $product; } } return $results; }