/** * Render dropdowns for any filterable checkout add-ons * * @since 1.0 */ public function restrict_orders() { global $typenow; if ('shop_order' != $typenow) { return; } $javascript = ''; foreach (wc_checkout_add_ons()->get_add_ons() as $add_on) { // if the add-on is filterable if ($add_on->is_filterable()) { if ($add_on->has_options()) { // filterable multi item add-on field (select, multiselect, radio, checkbox), provide a dropdown ?> <select name="<?php echo esc_attr($add_on->get_key()); ?> " id="<?php echo esc_attr($add_on->get_key()); ?> " class="wc-enhanced-select" data-placeholder="<?php echo __("Show all ", WC_Checkout_Add_Ons::TEXT_DOMAIN) . $add_on->name; ?> " data-allow_clear="true" style="min-width:200px;"> <option value=""></option> <?php foreach ($add_on->get_options() as $option) { if ('' === $option['value'] && '' === $option['label']) { continue; } echo '<option value="' . $option['value'] . '" ' . (isset($_GET[$add_on->get_key()]) ? selected($option['value'], $_GET[$add_on->get_key()]) : '') . '>' . __($option['label'], WC_Checkout_Add_Ons::TEXT_DOMAIN) . '</option>'; } ?> </select> <?php $javascript .= SV_WC_Plugin_Compatibility::is_wc_version_lt_2_3() ? "if ( \$().chosen ) { \$('select#" . $add_on->get_key() . "').chosen( { allow_single_deselect: true } ); }" : ""; } elseif ($add_on->type == 'text') { if (SV_WC_Plugin_Compatibility::is_wc_version_gte_2_3()) { ?> <input type="hidden" class="sv-wc-enhanced-search" name="<?php echo esc_attr($add_on->get_key()); ?> " style="min-width:200px;" data-placeholder="<?php echo __("Show all ", WC_Checkout_Add_Ons::TEXT_DOMAIN) . $add_on->label; ?> " data-selected="<?php echo empty($_GET[$add_on->get_key()]) ? '' : $_GET[$add_on->get_key()]; ?> " value="<?php echo empty($_GET[$add_on->get_key()]) ? '' : esc_attr($_GET[$add_on->get_key()]); ?> " data-allow_clear="true" data-action="wc_checkout_add_ons_json_search_field" data-nonce="<?php echo wp_create_nonce('search-field'); ?> " data-request_data = "<?php echo esc_attr(json_encode(array('add_on_id' => $add_on->id, 'default' => addslashes(__('Show all ', WC_Checkout_Add_Ons::TEXT_DOMAIN) . $add_on->name)))); ?> " /> <?php SV_WC_Helper::render_select2_ajax(); } else { // search box dropdown ?> <select id="<?php echo esc_attr($add_on->get_key()); ?> " name="<?php echo esc_attr($add_on->get_key()); ?> " data-placeholder="<?php echo __("Show all ", WC_Checkout_Add_Ons::TEXT_DOMAIN) . $add_on->name; ?> " data-allow_clear="true" style="min-width:200px;"> <option value=""></option> <?php if (!empty($_GET[$add_on->get_key()])) { echo '<option value="' . esc_attr($_GET[$add_on->get_key()]) . '" '; selected(1, 1); echo '>' . $_GET[$add_on->get_key()] . '</option>'; } ?> </select> <?php $javascript .= "\n\t\t\t\t\t\t\t\$( 'select#" . $add_on->get_key() . "' ).ajaxChosen( {\n\t\t\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\t\t\turl: '" . admin_url('admin-ajax.php') . "',\n\t\t\t\t\t\t\t\tdataType: 'json',\n\t\t\t\t\t\t\t\tafterTypeDelay: '100',\n\t\t\t\t\t\t\t\tminTermLength: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\taction: 'wc_checkout_add_ons_json_search_field',\n\t\t\t\t\t\t\t\t\tsecurity: '" . wp_create_nonce("search-field") . "',\n\t\t\t\t\t\t\t\t\trequest_data: { 'add_on_id' : '" . $add_on->id . "', 'default' : '" . addslashes(__('Show all ', WC_Checkout_Add_Ons::TEXT_DOMAIN) . $add_on->name) . "' },\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, function ( data ) {\n\n\t\t\t\t\t\t\t\tvar terms = {};\n\n\t\t\t\t\t\t\t\t\$.each( data, function ( i, val ) {\n\t\t\t\t\t\t\t\t\tterms[ i ] = val;\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\treturn terms;\n\t\t\t\t\t\t\t}, { allow_single_deselect: true } );"; } } elseif ($add_on->type == 'checkbox' || $add_on->type == 'file') { $checked = isset($_GET[$add_on->get_key()]) && $_GET[$add_on->get_key()]; ?> <label class="wc-checkout-add-on-checkbox-filter"> <input type="checkbox" id="<?php echo esc_attr($add_on->get_key()); ?> " name="<?php echo esc_attr($add_on->get_key()); ?> " value="1" <?php checked($checked); ?> > <?php echo $add_on->name; ?> </label> <?php } } } // filterable dropdown javascript wc_enqueue_js($javascript); }
/** * Render dropdowns for any filterable custom order fields * * @since 1.0 */ public function restrict_orders() { global $typenow; if ('shop_order' != $typenow) { return; } $javascript = ''; foreach (wc_admin_custom_order_fields()->get_order_fields() as $order_field) { // if the field is filterable if ($order_field->is_filterable()) { if ($order_field->type == 'date') { // filterable date field: provide a monthly dropdown $this->render_months_dropdown($order_field->label, $order_field->get_meta_key()); $javascript .= "if ( ! \$().select2 && \$().chosen ) { \$( 'select#" . $order_field->get_meta_key() . "' ).chosen( { allow_single_deselect: true } ); }"; } elseif ($order_field->has_options()) { // filterable multi item field (select, multiselect, radio, checkbox), provide a dropdown ?> <select name="<?php echo esc_attr($order_field->get_meta_key()); ?> " id="<?php echo esc_attr($order_field->get_meta_key()); ?> " class="wc-enhanced-select" data-placeholder="<?php echo __("Show all ", 'wc_admin_custom_order_fields') . $order_field->label; ?> " data-allow_clear="true" style="min-width:200px;"> <option value=""></option> <?php foreach ($order_field->get_options() as $option) { if ('' === $option['value'] && '' === $option['label']) { continue; } echo '<option value="' . $option['value'] . '" ' . (isset($_GET[$order_field->get_meta_key()]) ? selected($option['value'], $_GET[$order_field->get_meta_key()]) : '') . '>' . __($option['label'], 'wc_admin_custom_order_fields') . '</option>'; } ?> </select> <?php $javascript .= SV_WC_Plugin_Compatibility::is_wc_version_lt_2_3() ? "if ( ! \$().select2 && \$().chosen ) { \$('select#" . $order_field->get_meta_key() . "').chosen( { allow_single_deselect: true } ); }" : ""; } elseif ($order_field->type == 'text') { if (SV_WC_Plugin_Compatibility::is_wc_version_gte_2_3()) { ?> <input type="hidden" class="sv-wc-enhanced-search" name="<?php echo esc_attr($order_field->get_meta_key()); ?> " style="min-width:200px;" data-placeholder="<?php echo __('Show all ', 'wc_admin_custom_order_fields') . $order_field->label; ?> " data-selected="<?php echo empty($_GET[$order_field->get_meta_key()]) ? '' : $_GET[$order_field->get_meta_key()]; ?> " value="<?php echo empty($_GET[$order_field->get_meta_key()]) ? '' : esc_attr($_GET[$order_field->get_meta_key()]); ?> " data-allow_clear="true" data-action="wc_admin_custom_order_fields_json_search_field" data-nonce="<?php echo wp_create_nonce('search-field'); ?> " data-request_data = "<?php echo esc_attr(json_encode(array('field_name' => $order_field->get_meta_key(), 'default' => __('Show all ', 'wc_admin_custom_order_fields') . $order_field->label))); ?> " /> <?php SV_WC_Helper::render_select2_ajax(); } else { // search box dropdown ?> <select id="<?php echo esc_attr($order_field->get_meta_key()); ?> " name="<?php echo esc_attr($order_field->get_meta_key()); ?> " data-placeholder="<?php echo __('Show all ', 'wc_admin_custom_order_fields') . $order_field->label; ?> " data-allow_clear="true" style="min-width:200px;"> <option value=""></option> <?php if (!empty($_GET[$order_field->get_meta_key()])) { echo '<option value="' . esc_attr($_GET[$order_field->get_meta_key()]) . '" '; selected(1, 1); echo '>' . $_GET[$order_field->get_meta_key()] . '</option>'; } ?> </select> <?php $javascript .= "\n\t\t\t\t\t\tif ( \$().ajaxChosen ) {\n\t\t\t\t\t\t\t\$( 'select#" . $order_field->get_meta_key() . "' ).ajaxChosen( {\n\t\t\t\t\t\t\t\tmethod: 'GET',\n\t\t\t\t\t\t\t\turl: '" . admin_url('admin-ajax.php') . "',\n\t\t\t\t\t\t\t\tdataType: 'json',\n\t\t\t\t\t\t\t\tafterTypeDelay: '100',\n\t\t\t\t\t\t\t\tminTermLength: 1,\n\t\t\t\t\t\t\t\tdata: {\n\t\t\t\t\t\t\t\t\trequest_data: { 'field_name' : '" . $order_field->get_meta_key() . "', 'default' : '" . __('Show all ' . $order_field->label, 'wc_admin_custom_order_fields') . "' },\n\t\t\t\t\t\t\t\t\taction: 'wc_admin_custom_order_fields_json_search_field',\n\t\t\t\t\t\t\t\t\tsecurity: '" . wp_create_nonce("search-field") . "',\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}, function ( data ) {\n\n\t\t\t\t\t\t\t\tvar terms = {};\n\n\t\t\t\t\t\t\t\t\$.each( data, function ( i, val ) {\n\t\t\t\t\t\t\t\t\tterms[ i ] = val;\n\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t\treturn terms;\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tallow_single_deselect: true\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t"; } } } } // filterable dropdown javascript wc_enqueue_js($javascript); }