* Returns type pf passed id, post or order object. * * @param int|WP_Post|WC_Order $order_id Order ID, post object or order object. * * @return string|null Type of the order. */ public static function get_order_type( $order_id ) { return wc_get_container()->get( COTMigrationUtil::class )->get_order_type( $order_id ); } /** * Helper method to generate admin url for an order. * * @param int $order_id Order ID. * * @return string Admin url for an order. */ public static function get_order_admin_edit_url( int $order_id ) : string { return wc_get_container()->get( PageController::class )->get_edit_url( $order_id ); } /** * Helper method to generate admin URL for new order. * * @return string Link for new order. */ public static function get_order_admin_new_url() : string { return wc_get_container()->get( PageController::class )->get_new_page_url(); } /** * Check if the current admin screen is an order list table. * * @param string $order_type Optional. The order type to check for. Default shop_order. * * @return bool */ public static function is_order_list_table_screen( $order_type = 'shop_order' ) : bool { return wc_get_container()->get( PageController::class )->is_order_screen( $order_type, 'list' ); } /** * Check if the current admin screen is for editing an order. * * @param string $order_type Optional. The order type to check for. Default shop_order. * * @return bool */ public static function is_order_edit_screen( $order_type = 'shop_order' ) : bool { return wc_get_container()->get( PageController::class )->is_order_screen( $order_type, 'edit' ); } /** * Check if the current admin screen is adding a new order. * * @param string $order_type Optional. The order type to check for. Default shop_order. * * @return bool */ public static function is_new_order_screen( $order_type = 'shop_order' ) : bool { return wc_get_container()->get( PageController::class )->is_order_screen( $order_type, 'new' ); } /** * Get the name of the database table that's currently in use for orders. * * @return string */ public static function get_table_for_orders() { return wc_get_container()->get( COTMigrationUtil::class )->get_table_for_orders(); } /** * Get the name of the database table that's currently in use for orders. * * @return string */ public static function get_table_for_order_meta() { return wc_get_container()->get( COTMigrationUtil::class )->get_table_for_order_meta(); } /** * Counts number of orders of a given type. * * @since 8.7.0 * * @param string $order_type Order type. * @return array Array of order counts indexed by order type. */ public static function get_count_for_type( $order_type ) { global $wpdb; $cache_key = \WC_Cache_Helper::get_cache_prefix( 'orders' ) . 'order-count-' . $order_type; $count_per_status = wp_cache_get( $cache_key, 'counts' ); if ( false === $count_per_status ) { if ( self::custom_orders_table_usage_is_enabled() ) { // phpcs:disable WordPress.DB.PreparedSQL.NotPrepared $results = $wpdb->get_results( $wpdb->prepare( 'SELECT `status`, COUNT(*) AS `count` FROM ' . self::get_table_for_orders() . ' WHERE `type` = %s GROUP BY `status`', $order_type ), ARRAY_A ); // phpcs:enable $count_per_status = array_map( 'absint', array_column( $results, 'count', 'status' ) ); } else { $count_per_status = (array) wp_count_posts( $order_type ); } // Make sure all order statuses are included just in case. $count_per_status = array_merge( array_fill_keys( array_keys( wc_get_order_statuses() ), 0 ), $count_per_status ); wp_cache_set( $cache_key, $count_per_status, 'counts' ); } return $count_per_status; } /** * Removes the 'wc-' prefix from status. * * @param string $status The status to remove the prefix from. * * @return string The status without the prefix. * @since 9.2.0 */ public static function remove_status_prefix( string $status ): string { if ( strpos( $status, 'wc-' ) === 0 ) { $status = substr( $status, 3 ); } return $status; } }