'; $error .= '

Additional Order Filters for WooCommerce Plugin requires WooCommerce to be installed and active.

'; $error .= ''; echo $error; } } function waof_woocommerce_settings_check() { global $typenow; $enabled_filters = $this->woaf_enabled_additional_filters(); if( 'shop_order' == $typenow && empty($enabled_filters) ) { $notice .= '
'; $notice .= '

Enable additional order filters on settings page to use them

'; $notice .= '
'; echo $notice; } } function waof_plugin_add_settings_link( $links ) { $settings_link = '' . __( 'Settings', 'woaf-plugin' ) . ''; array_push( $links, $settings_link ); return $links; } function woaf_saving_settings() { if ( isset($_POST['ant_waof_save_settings']) ) { if ( function_exists('check_admin_referer') ) { check_admin_referer('ant_waof_save_settings'); } if ( !empty($_POST['filters']) ) { $enabled_filters = $_POST['filters']; $filters = array(); foreach ($enabled_filters as $filter) { $filters[] = sanitize_text_field( $filter ); } } if ( !empty($_POST['woaf_per_column']) ) { if ( is_numeric($_POST['woaf_per_column']) ) { sanitize_text_field( update_option( 'woaf_per_column', $_POST['woaf_per_column'] ) ); } } update_option( 'ant_additional_order_enabled_filters', serialize( $filters ) ); return true; } } function woaf_show_plugin_settings() { $save_settings = $this->woaf_saving_settings(); $output = ''; $output .= '
'; $output .= '

Additional Order Filters Settings

'; $output .= '

'.__( 'Active filters:', 'woaf-plugin' ).'

'; $output .= '
'; if ( function_exists('wp_nonce_field') ) { $output .= wp_nonce_field('ant_waof_save_settings'); } $filters = $this->woaf_get_filters(); $enabled_filters = $this->woaf_enabled_additional_filters(); $per_column = ( get_option( 'woaf_per_column' ) ) ? get_option( 'woaf_per_column' ) : '4' ; if ( !empty($filters) ) { $output .= ""; } $output .= '
'; $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; if ( $save_settings ) { $output .= '

Settings saved

'; } $output .= ''; $output .= '
'; $output .= '
'; // .wrap echo $output; } function woaf_enabled_additional_filters() { $enabled_filters = get_option( 'ant_additional_order_enabled_filters' ); if ( !empty( $enabled_filters ) ) { $enabled_filters = unserialize( $enabled_filters ); } return $enabled_filters; } function woaf_show_button($views) { echo 'Additional Filters'; return $views; } function woaf_get_filters() { $filters = array(); //$filters[0]['name'] = 'Order Statuses'; $filters[0]['name'] = __( 'Order Statuses', 'woaf-plugin' ); $filters[0]['id'] = 'order_statuses'; $filters[1]['name'] = __( 'Payment Method', 'woaf-plugin' ); $filters[1]['id'] = 'payment_method'; $filters[2]['name'] = __( 'Customer Group', 'woaf-plugin' ); $filters[2]['id'] = 'customer_group'; $filters[3]['name'] = __( 'Shipping Method', 'woaf-plugin' ); $filters[3]['id'] = 'shipping_method'; $filters[4]['name'] = __( 'Customer Email', 'woaf-plugin' ); $filters[4]['id'] = 'customer_email'; $filters[5]['name'] = __( 'Customer First Name', 'woaf-plugin' ); $filters[5]['id'] = 'customer_first_name'; $filters[6]['name'] = __( 'Customer Last Name', 'woaf-plugin' ); $filters[6]['id'] = 'customer_last_name'; $filters[7]['name'] = __( 'Customer Billing Address', 'woaf-plugin' ); $filters[7]['id'] = 'customer_billing_address'; $filters[8]['name'] = __( 'Customer Phone', 'woaf-plugin' ); $filters[8]['id'] = 'customer_phone'; $filters[9]['name'] = __( 'Track Number', 'woaf-plugin' ); $filters[9]['desc'] = __( 'This filter requires Shipment Tracking or WooCommerce Shipment Tracking Plugin.
Use only one of them.', 'woaf-plugin' ); $filters[9]['id'] = 'track_number'; $filters[10]['name'] = __( 'Search by SKU Number', 'woaf-plugin' ); $filters[10]['id'] = 'search_by_sku'; $filters[11]['name'] = __( 'Orders by Date Range', 'woaf-plugin' ); $filters[11]['id'] = 'orders_by_date_range'; $filters[12]['name'] = __( 'Order Total', 'woaf-plugin' ); $filters[12]['id'] = 'filter_order_total'; return $filters; } function woaf_show_filters() { $post_type = sanitize_text_field( $_GET['post_type'] ); if (!isset($_GET['post_type']) || $post_type !='shop_order') { return false; } global $wpdb; $filters = $this->woaf_get_filters(); $enabled_filters = $this->woaf_enabled_additional_filters(); if ( !empty($enabled_filters) ) { $output .= '
'; //$output .= ''.__( 'Additional Filters', 'woaf-plugin' ) .''; if ( isset( $_COOKIE["ant_special_order_filter"] ) && $_COOKIE["ant_special_order_filter"] == 'opened' ) $opened = 'style="display:block"'; $output .= "
"; $per_column = get_option( 'woaf_per_column' ); $per_column = ($per_column) ? $per_column : '4'; foreach (array_chunk($filters, $per_column, true) as $filter) { $output .= '
'; foreach ($filter as $filter) { if ( !empty($enabled_filters) && in_array( $filter['id'], $enabled_filters ) ) { if ( $filter['id'] == 'order_statuses' ) : $output .= '
'; $output .= ''; $output .= '"; $output .= "
"; endif; if ( $filter['id'] == 'payment_method' ) : $selected = sanitize_text_field($_GET['payment_customer_filter']); $gateways = WC()->payment_gateways->payment_gateways(); $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'customer_group' ) : $selected = sanitize_text_field($_GET['nonregistered_users_filter']); if ( $selected == 'nonregistered_users' ) $selected = 'selected'; if ( $selected == 'registered_users' ) $selected_reg = 'selected'; $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'shipping_method' ) : $output .= '
'; $shipping_method_filter = (isset( $_GET['shipping_method_filter'] )) ? sanitize_text_field($_GET['shipping_method_filter']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'customer_email' ) : $output .= '
'; $user_email_search = (isset( $_GET['user_email_search'] )) ? sanitize_text_field($_GET['user_email_search']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'customer_first_name' ) : $output .= '
'; $user_billing_first_name = (isset( $_GET['user_billing_first_name'] )) ? sanitize_text_field($_GET['user_billing_first_name']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'customer_last_name' ) : $output .= '
'; $user_billing_last_name = (isset( $_GET['user_billing_last_name'] )) ? sanitize_text_field($_GET['user_billing_last_name']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'customer_billing_address' ) : $output .= '
'; $user_billing_address = (isset( $_GET['user_billing_address'] )) ? sanitize_text_field($_GET['user_billing_address']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'customer_phone' ) : $output .= '
'; $user_phone = (isset( $_GET['user_phone'] )) ? sanitize_text_field($_GET['user_phone']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'track_number' ) : $output .= '
'; $shpping_track_number = (isset( $_GET['shpping_track_number'] )) ? sanitize_text_field($_GET['shpping_track_number']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'search_by_sku' ) : $output .= '
'; $ant_filter_search_sku = (isset( $_GET['ant_filter_search_sku'] )) ? sanitize_text_field($_GET['ant_filter_search_sku']) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'orders_by_date_range' ) : $output .= '
'; $output .= ''; $from = ( isset($_GET['ant_filter_start_date']) ) ? sanitize_text_field( $_GET['ant_filter_start_date'] ) : ''; $to = ( isset($_GET['ant_filter_end_date']) ) ? sanitize_text_field( $_GET['ant_filter_end_date'] ) : ''; $output .= ''; $output .= ''; $output .= '
'; endif; if ( $filter['id'] == 'filter_order_total' ) : $output .= '
'; $order_total_start = (isset( $_GET['order_total_start'] )) ? sanitize_text_field($_GET['order_total_start']) : ''; $order_total_end = (isset( $_GET['order_total_end'] )) ? sanitize_text_field($_GET['order_total_end']) : ''; $output .= ''; $output .= '
'; endif; } } $output .= "
"; } $output .= '
'; $output .= ''; $output .= ''; $output .= '
'; $output .= '
'; $output .= "
"; // .ant_special_order_filter $output .= "
"; // .ant_special_order_filter_wrapper } echo $output; } function woaf_where_plugin_functions( $where ) { global $typenow, $wpdb; if( 'shop_order' == $typenow ) { if ( isset( $_GET['nonregistered_users_filter'] ) && !empty( $_GET['nonregistered_users_filter'] ) ) { // search by user email $filter = trim( sanitize_text_field($_GET['nonregistered_users_filter']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); if ( !empty( $filter ) && $filter == 'nonregistered_users' ) : $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_customer_user' AND meta_value = '0' OR meta_key = '_customer_user' AND meta_value = '' ) "; endif; if ( !empty( $filter ) && $filter == 'registered_users' ) : $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_customer_user' AND meta_value > '0' )"; endif; } if ( isset( $_GET['post_status'] ) && !empty( $_GET['post_status'] ) ) { // search by order statuses $filter = ''; $count = count( $_GET['post_status'] ); foreach ($_GET['post_status'] as $k => $status) { $last = ( $k + 1 == $count ) ? "" : ", "; $filter .= "'". trim( sanitize_text_field($status) ) . "'$last"; } if ( !empty( $filter ) ) { $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->posts .".ID FROM ".$wpdb->posts ." WHERE `post_status` IN (".$filter."))"; } } if ( isset( $_GET['user_email_search'] ) && !empty( $_GET['user_email_search'] ) ) { // search by user email $filter = trim( sanitize_text_field($_GET['user_email_search']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_billing_email' AND meta_value LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['user_billing_first_name'] ) && !empty( $_GET['user_billing_first_name'] ) ) { // search by billing first name $filter = trim( sanitize_text_field($_GET['user_billing_first_name']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_billing_first_name' AND meta_value LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['user_billing_last_name'] ) && !empty( $_GET['user_billing_last_name'] ) ) { // search by billing last name $filter = trim( sanitize_text_field($_GET['user_billing_last_name']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_billing_last_name' AND meta_value LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['user_billing_address'] ) && !empty( $_GET['user_billing_address'] ) ) { // search by billing address $filter = trim( sanitize_text_field($_GET['user_billing_address']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_billing_address_1' AND meta_value LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['user_phone'] ) && !empty( $_GET['user_phone'] ) ) { // search by billing phone or shipping phone $filter = trim( sanitize_text_field($_GET['user_phone']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_billing_phone' AND meta_value LIKE '%" . $filter . "%' OR meta_key = '_shipping_phone' AND meta_value LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['order_total_start'] ) && !empty( $_GET['order_total_start'] ) || isset( $_GET['order_total_end'] ) && !empty( $_GET['order_total_end'] ) ) { // search by total $start = $_GET['order_total_start']; $end = $_GET['order_total_end']; if ( is_numeric( $start ) || is_numeric( $end ) ) { $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_order_total'"; if ( is_numeric( $start ) ){ $where .= " AND meta_value >= " . sprintf("%.2f", $start); } if ( is_numeric( $end ) ){ $where .= " AND meta_value <= " . sprintf("%.2f", $end) ; } $where .= " ) "; } } if ( isset( $_GET['shipping_method_filter'] ) && !empty( $_GET['shipping_method_filter'] ) ) { // search by shipping $filter = trim( sanitize_text_field($_GET['shipping_method_filter']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->prefix."woocommerce_order_items.order_id FROM ".$wpdb->prefix."woocommerce_order_items WHERE order_item_type = 'shipping' AND order_item_name LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['payment_customer_filter'] ) && !empty( $_GET['payment_customer_filter'] ) ) { // search by payment method $filter = trim( sanitize_text_field($_GET['payment_customer_filter']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_payment_method' AND meta_value LIKE '%" . $filter . "%' )"; } if ( isset( $_GET['shpping_track_number'] ) && !empty( $_GET['shpping_track_number'] ) ) { // search by track number $filter = trim( sanitize_text_field($_GET['shpping_track_number']) ); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); if ( is_plugin_active( 'woocommerce-shipment-tracking/shipment-tracking.php' ) ) { $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = '_wc_shipment_tracking_items' AND meta_value LIKE '%\"tracking_number\";s:%" . $filter . "%' )"; } elseif ( is_plugin_active( 'woo-shipment-tracking-order-tracking/woocommerce-shipment-tracking.php' ) ) { $where .= " AND $wpdb->posts.ID IN (SELECT ".$wpdb->postmeta.".post_id FROM ".$wpdb->postmeta." WHERE meta_key = 'wf_wc_shipment_source' AND meta_value LIKE '%\"shipment_id_cs\";s:%" . $filter . "%' )"; } } if ( isset( $_GET['ant_filter_search_sku'] ) && !empty( $_GET['ant_filter_search_sku'] ) ) { // search by SKU $filter = trim($_GET['ant_filter_search_sku']); $filter = str_replace("*", "%", $filter); $filter = $wpdb->_escape($filter); $where .= " AND ($wpdb->posts.ID IN( SELECT $wpdb->posts.ID FROM $wpdb->posts INNER JOIN " . $wpdb->prefix . "woocommerce_order_items ON $wpdb->posts.ID = " . $wpdb->prefix . "woocommerce_order_items.order_id INNER JOIN " . $wpdb->prefix . "woocommerce_order_itemmeta ON " . $wpdb->prefix . "woocommerce_order_items.order_item_id = " . $wpdb->prefix . "woocommerce_order_itemmeta.order_item_id INNER JOIN $wpdb->postmeta ON " . $wpdb->prefix . "woocommerce_order_itemmeta.meta_value = $wpdb->postmeta.post_id WHERE $wpdb->posts.post_type = 'shop_order' AND " . $wpdb->prefix . "woocommerce_order_items.order_item_type = 'line_item' AND " . $wpdb->prefix . "woocommerce_order_itemmeta.meta_key = '_product_id' AND $wpdb->postmeta.meta_key = '_sku' AND $wpdb->postmeta.meta_value LIKE '" . $filter . "') )"; } } return $where; } function woaf_filter_date_range( $wp_query ) { global $pagenow; if ( is_admin() && $wp_query->is_main_query() && isset($_GET['post_type']) && sanitize_text_field($_GET['post_type']) =='shop_order' && ! empty( $_GET['ant_filter_start_date'] ) && ! empty( $_GET['ant_filter_end_date'] ) ) { $from = explode( '/', sanitize_text_field( $_GET['ant_filter_start_date'] ) ); $to = explode( '/', sanitize_text_field( $_GET['ant_filter_end_date'] ) ); $from = array_map( 'intval', $from ); $to = array_map( 'intval', $to ); if ( 3 === count( $to ) && 3 === count( $from ) ) { list( $year_from, $month_from, $day_from ) = $from; list( $year_to, $month_to, $day_to ) = $to; } else { return $wp_query; } $wp_query->set( 'date_query', array( 'after' => array( 'year' => $year_from, 'month' => $month_from, 'day' => $day_from, ), 'before' => array( 'year' => $year_to, 'month' => $month_to, 'day' => $day_to, ), 'inclusive' => apply_filters( 'woo_orders_filterby_date_range_query_is_inclusive', true ), 'column' => apply_filters( 'woo_orders_filterby_date_query_column', 'post_date' ), ) ); } return $wp_query; } function woaf_additional_plugin_admin_head() { global $typenow; if ( isset($_GET['page']) && $_GET['page'] == 'additional-order-filters' ) { ?>