WC_Subscription form. * @since 2.0 */ function wcs_get_subscriptions_for_switch_order( $order ) { return wcs_get_subscriptions_for_order( $order, array( 'order_type' => 'switch' ) ); } /** * Get all the orders which have recorded a switch for a given subscription. * * @param int|WC_Subscription $subscription_id The post_id of a shop_subscription post or an instance of a WC_Subscription object * @return array Order details in post_id => WC_Order form. * @since 2.0 */ function wcs_get_switch_orders_for_subscription( $subscription_id ) { $subscription = wcs_get_subscription( $subscription_id ); return $subscription->get_related_orders( 'all', 'switch' ); } /** * Checks if a given product is of a switchable type * * @param int|WC_Product $product A WC_Product object or the ID of a product to check * @return bool * @since 2.0 */ function wcs_is_product_switchable_type( $product ) { if ( ! is_object( $product ) ) { $product = wc_get_product( $product ); } $variation = null; if ( empty( $product ) ) { $is_product_switchable = false; } else { // back compat for parent products if ( $product->is_type( 'subscription_variation' ) && $product->get_parent_id() ) { $variation = $product; $product = wc_get_product( $product->get_parent_id() ); } $allow_switching = get_option( WC_Subscriptions_Admin::$option_prefix . '_allow_switching', 'no' ); switch ( $allow_switching ) { case 'variable' : $is_product_switchable = $product->is_type( array( 'variable-subscription', 'subscription_variation' ) ) && 'publish' === wcs_get_objects_property( $product, 'post_status' ); break; case 'grouped' : $is_product_switchable = (bool) WC_Subscriptions_Product::get_visible_grouped_parent_product_ids( $product ); break; case 'variable_grouped' : $is_product_switchable = ( $product->is_type( array( 'variable-subscription', 'subscription_variation' ) ) && 'publish' === wcs_get_objects_property( $product, 'post_status' ) ) || WC_Subscriptions_Product::get_visible_grouped_parent_product_ids( $product ); break; case 'no' : default: $is_product_switchable = false; break; } } return apply_filters( 'wcs_is_product_switchable', $is_product_switchable, $product, $variation ); }