get( 'post_type' ) ) { return; } $meta_query = (array) $query->get( 'meta_query' ); $service = self::get_filtered_service(); if ( ! empty( $service ) ) { $meta_query[] = array( 'key' => '_orderable_service_type', 'value' => $service, ); } $query->set( 'meta_query', $meta_query ); } /** * Get service type for an order. * * @param WC_Order $order * * @return bool|string */ public static function get_service_type( $order ) { $shipping_methods = $order->get_shipping_methods(); $type = false; if ( empty( $shipping_methods ) ) { return $type; } $shipping_method = array_shift( $shipping_methods ); $shipping_method_id = $shipping_method->get_method_id(); return Orderable_Services::is_pickup_method( $shipping_method_id ) ? 'pickup' : 'delivery'; } /** * Add columns to admin orders screen. * * @param array $columns * * @return array */ public static function add_admin_order_columns( $columns ) { $columns['orderable_service_type'] = __( 'Service', 'orderable' ); return $columns; } /** * Add columns content to admin orders screen. * * @param $column_name * @param $post_id */ public static function add_admin_order_columns_content( $column_name, $post_id ) { if ( 'orderable_service_type' === $column_name ) { $order = wc_get_order( $post_id ); $type = Orderable_Services_Order::get_service_type( $order ); $background = 'pickup' === $type ? '#C6C7E1' : '#c5e2df'; $color = 'pickup' === $type ? '#6264ac' : '#3e7a74'; printf( '%s', esc_attr( $type ), esc_attr( $background ), esc_attr( $color ), Orderable_Services::get_service_label( $type ) ); } } /** * Modify order date/time labels. * * @param array $labels * @param WC_Order $order * * @return array */ public static function modify_order_date_time_labels( $labels, $order ) { $type = Orderable_Services_Order::get_service_type( $order ); $type_label = Orderable_Services::get_service_label( $type ); $labels['order_date']['label'] = sprintf( '%s %s', $type_label, $labels['order_date']['label'] ); $labels['order_time']['label'] = sprintf( '%s %s', $type_label, $labels['order_time']['label'] ); return $labels; } /** * Save order meta. * * @param WC_Abstract_Order $abstract_order * @param WC_Data_Store $data_store * * @return string */ public static function before_save_order( $abstract_order, $data_store ) { if ( empty( $abstract_order ) ) { return; } $type = Orderable_Services_Order::get_service_type( $abstract_order ); $abstract_order->update_meta_data( '_orderable_service_type', $type ); } }