/** * Outputs hidden form inputs for each query string variable. * @since 2.7.0 * @param array $values Name value pairs. * @param array $exclude Keys to exclude. * @param string $current_key Current key we are outputting. */ function wc_query_string_form_fields($values = null, $exclude = array(), $current_key = '', $return = false) { if (is_null($values)) { $values = $_GET; } $html = ''; foreach ($values as $key => $value) { if (in_array($key, $exclude, true)) { continue; } if ($current_key) { $key = $current_key . '[' . $key . ']'; } if (is_array($value)) { $html .= wc_query_string_form_fields($value, $exclude, $key, true); } else { $html .= '<input type="hidden" name="' . esc_attr($key) . '" value="' . esc_attr($value) . '" />'; } } if ($return) { return $html; } else { echo $html; } }
/** * Output widget. * * @see WP_Widget * * @param array $args * @param array $instance */ public function widget($args, $instance) { global $wp, $wp_the_query; if (!is_post_type_archive('product') && !is_tax(get_object_taxonomies('product'))) { return; } if (!$wp_the_query->post_count) { return; } $min_price = isset($_GET['min_price']) ? esc_attr($_GET['min_price']) : ''; $max_price = isset($_GET['max_price']) ? esc_attr($_GET['max_price']) : ''; wp_enqueue_script('wc-price-slider'); // Find min and max price in current result set $prices = $this->get_filtered_price(); $min = floor($prices->min_price); $max = ceil($prices->max_price); if ($min === $max) { return; } $this->widget_start($args, $instance); if ('' === get_option('permalink_structure')) { $form_action = remove_query_arg(array('page', 'paged'), add_query_arg($wp->query_string, '', home_url($wp->request))); } else { $form_action = preg_replace('%\\/page/[0-9]+%', '', home_url(trailingslashit($wp->request))); } /** * Adjust max if the store taxes are not displayed how they are stored. * Min is left alone because the product may not be taxable. * Kicks in when prices excluding tax are displayed including tax. */ if (wc_tax_enabled() && 'incl' === get_option('woocommerce_tax_display_shop') && !wc_prices_include_tax()) { $tax_classes = array_merge(array(''), WC_Tax::get_tax_classes()); $class_max = $max; foreach ($tax_classes as $tax_class) { if ($tax_rates = WC_Tax::get_rates($tax_class)) { $class_max = $max + WC_Tax::get_tax_total(WC_Tax::calc_exclusive_tax($max, $tax_rates)); } } $max = $class_max; } echo '<form method="get" action="' . esc_url($form_action) . '"> <div class="price_slider_wrapper"> <div class="price_slider" style="display:none;"></div> <div class="price_slider_amount"> <input type="text" id="min_price" name="min_price" value="' . esc_attr($min_price) . '" data-min="' . esc_attr(apply_filters('woocommerce_price_filter_widget_min_amount', $min)) . '" placeholder="' . esc_attr__('Min price', 'woocommerce') . '" /> <input type="text" id="max_price" name="max_price" value="' . esc_attr($max_price) . '" data-max="' . esc_attr(apply_filters('woocommerce_price_filter_widget_max_amount', $max)) . '" placeholder="' . esc_attr__('Max price', 'woocommerce') . '" /> <button type="submit" class="button">' . __('Filter', 'woocommerce') . '</button> <div class="price_label" style="display:none;"> ' . __('Price:', 'woocommerce') . ' <span class="from"></span> — <span class="to"></span> </div> ' . wc_query_string_form_fields(null, array('min_price', 'max_price'), '', true) . ' <div class="clear"></div> </div> </div> </form>'; $this->widget_end($args); }
* @version 2.2.0 */ if (!defined('ABSPATH')) { exit; // Exit if accessed directly } ?> <form class="woocommerce-ordering" method="get"> <select name="orderby" class="orderby"> <?php foreach ($catalog_orderby_options as $id => $name) { ?> <option value="<?php echo esc_attr($id); ?> " <?php selected($orderby, $id); ?> ><?php echo esc_html($name); ?> </option> <?php } ?> </select> <?php wc_query_string_form_fields(null, array('orderby', 'submit')); ?> </form>