/**
 * 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> &mdash; <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);
    }
Beispiel #3
1
 * @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>