Woocommerce价格过滤器Php文本换行

时间:2018-03-13 14:39:32

标签: php woocommerce

在我的woocommerce网站上,我在商店的侧边栏中添加了woocommerce价格过滤器。问题是价格放在过滤器按钮旁边,然后文本换行。如何在按钮上方移动文本?我是否必须更改价格过滤器的PHP代码? 我用谷歌浏览器检查了页面,我看到进一步向上移动div我解决了问题,但我该如何应用呢?

查看侧栏link

这是php文件

class WC_Widget_Price_Filter extends WC_Widget {

/**
 * Constructor.
 */
public function __construct() {
    $this->widget_cssclass    = 'woocommerce widget_price_filter';
    $this->widget_description = __( 'Display a slider to filter products in your store by price.', 'woocommerce' );
    $this->widget_id          = 'woocommerce_price_filter';
    $this->widget_name        = __( 'Filter Products by Price', 'woocommerce' );
    $this->settings           = array(
        'title'  => array(
            'type'  => 'text',
            'std'   => __( 'Filter by price', 'woocommerce' ),
            'label' => __( 'Title', 'woocommerce' ),
        ),
    );
    $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
    wp_register_script( 'accounting', WC()->plugin_url() . '/assets/js/accounting/accounting' . $suffix . '.js', array( 'jquery' ), '0.4.2' );
    wp_register_script( 'wc-jquery-ui-touchpunch', WC()->plugin_url() . '/assets/js/jquery-ui-touch-punch/jquery-ui-touch-punch' . $suffix . '.js', array( 'jquery-ui-slider' ), WC_VERSION, true );
    wp_register_script( 'wc-price-slider', WC()->plugin_url() . '/assets/js/frontend/price-slider' . $suffix . '.js', array( 'jquery-ui-slider', 'wc-jquery-ui-touchpunch', 'accounting' ), WC_VERSION, true );
    wp_localize_script( 'wc-price-slider', 'woocommerce_price_slider_params', array(
        'currency_format_num_decimals' => 0,
        'currency_format_symbol'       => get_woocommerce_currency_symbol(),
        'currency_format_decimal_sep'  => esc_attr( wc_get_price_decimal_separator() ),
        'currency_format_thousand_sep' => esc_attr( wc_get_price_thousand_separator() ),
        'currency_format'              => esc_attr( str_replace( array( '%1$s', '%2$s' ), array( '%s', '%v' ), get_woocommerce_price_format() ) ),
    ) );

    if ( is_customize_preview() ) {
        wp_enqueue_script( 'wc-price-slider' );
    }

    parent::__construct();
}

/**
 * Output widget.
 *
 * @see WP_Widget
 *
 * @param array $args
 * @param array $instance
 */
public function widget( $args, $instance ) {
    global $wp;

    if ( ! is_shop() && ! is_product_taxonomy() ) {
        return;
    }

    if ( ! wc()->query->get_main_query()->post_count ) {
        return;
    }

    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', 'product-page' ), add_query_arg( $wp->query_string, '', home_url( $wp->request ) ) );
    } else {
        $form_action = preg_replace( '%\/page/[0-9]+%', '', home_url( trailingslashit( $wp->request ) ) );
    }

    $min_price = isset( $_GET['min_price'] ) ? esc_attr( $_GET['min_price'] ) : apply_filters( 'woocommerce_price_filter_widget_min_amount', $min );
    $max_price = isset( $_GET['max_price'] ) ? esc_attr( $_GET['max_price'] ) : apply_filters( 'woocommerce_price_filter_widget_max_amount', $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">' . esc_html__( 'Filter', 'woocommerce' ) . '</button>
                <div class="price_label" style="display:none;">
                    ' . esc_html__( '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 );
}

/**
 * Get filtered min price for current products.
 * @return int
 */
protected function get_filtered_price() {
    global $wpdb;

    $args       = wc()->query->get_main_query()->query_vars;
    $tax_query  = isset( $args['tax_query'] ) ? $args['tax_query'] : array();
    $meta_query = isset( $args['meta_query'] ) ? $args['meta_query'] : array();

    if ( ! is_post_type_archive( 'product' ) && ! empty( $args['taxonomy'] ) && ! empty( $args['term'] ) ) {
        $tax_query[] = array(
            'taxonomy' => $args['taxonomy'],
            'terms'    => array( $args['term'] ),
            'field'    => 'slug',
        );
    }

    foreach ( $meta_query + $tax_query as $key => $query ) {
        if ( ! empty( $query['price_filter'] ) || ! empty( $query['rating_filter'] ) ) {
            unset( $meta_query[ $key ] );
        }
    }

    $meta_query = new WP_Meta_Query( $meta_query );
    $tax_query  = new WP_Tax_Query( $tax_query );

    $meta_query_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
    $tax_query_sql  = $tax_query->get_sql( $wpdb->posts, 'ID' );

    $sql  = "SELECT min( FLOOR( price_meta.meta_value ) ) as min_price, max( CEILING( price_meta.meta_value ) ) as max_price FROM {$wpdb->posts} ";
    $sql .= " LEFT JOIN {$wpdb->postmeta} as price_meta ON {$wpdb->posts}.ID = price_meta.post_id " . $tax_query_sql['join'] . $meta_query_sql['join'];
    $sql .= "   WHERE {$wpdb->posts}.post_type IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_post_type', array( 'product' ) ) ) ) . "')
                AND {$wpdb->posts}.post_status = 'publish'
                AND price_meta.meta_key IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_meta_keys', array( '_price' ) ) ) ) . "')
                AND price_meta.meta_value > '' ";
    $sql .= $tax_query_sql['where'] . $meta_query_sql['where'];

    if ( $search = WC_Query::get_main_search_query_sql() ) {
        $sql .= ' AND ' . $search;
    }

    return $wpdb->get_row( $sql );
}

1 个答案:

答案 0 :(得分:0)

用以下代码替换表单代码(小部件功能 - &gt; $ max_price变量):

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' ) . '" />
            <div class="price_label" style="display:none;">
                ' . esc_html__( 'Price:', 'woocommerce' ) . ' <span class="from"></span> &mdash; <span class="to"></span>
            </div>
            ' . wc_query_string_form_fields( null, array( 'min_price', 'max_price' ), '', true ) . '
            <button type="submit" class="button">' . esc_html__( 'Filter', 'woocommerce' ) . '</button>
            <div class="clear"></div>
        </div>
    </div>
</form>';