gpt4 book ai didi

wordpress - WooCommerce 变体作为单选按钮

转载 作者:行者123 更新时间:2023-12-03 14:50:36 26 4
gpt4 key购买 nike

是否可以在 WooCommerce 中将变体下拉列表更改为单选按钮而无需使用插件?我想在变体部分进行以下设置:

  • 1 升(10 欧元)
  • 2 升(20 欧元)
  • 3 升(25 欧元)

  • 当您选择一个选项时,底部的价格应该会自动更改。

    谢谢

    最佳答案

    编辑:添加 variation_check()和 JS 变异检查感谢@ThomasB!
    EDIT2:确保 variation_check()还会检查延期交货状态,以便在产品可以延期交货时进行选择。
    我设法让它工作的最好方法是直接在选择下拉列表之后添加单选按钮标记,然后使用 CSS 隐藏选择下拉列表。您还需要一些自定义 JS 来触发隐藏的选择值更改,以便您的价格会根据您选择的单选按钮发生变化。
    这是我添加标记的方式:

    function variation_radio_buttons($html, $args) {
    $args = wp_parse_args(apply_filters('woocommerce_dropdown_variation_attribute_options_args', $args), array(
    'options' => false,
    'attribute' => false,
    'product' => false,
    'selected' => false,
    'name' => '',
    'id' => '',
    'class' => '',
    'show_option_none' => __('Choose an option', 'woocommerce'),
    ));

    if(false === $args['selected'] && $args['attribute'] && $args['product'] instanceof WC_Product) {
    $selected_key = 'attribute_'.sanitize_title($args['attribute']);
    $args['selected'] = isset($_REQUEST[$selected_key]) ? wc_clean(wp_unslash($_REQUEST[$selected_key])) : $args['product']->get_variation_default_attribute($args['attribute']);
    }

    $options = $args['options'];
    $product = $args['product'];
    $attribute = $args['attribute'];
    $name = $args['name'] ? $args['name'] : 'attribute_'.sanitize_title($attribute);
    $id = $args['id'] ? $args['id'] : sanitize_title($attribute);
    $class = $args['class'];
    $show_option_none = (bool)$args['show_option_none'];
    $show_option_none_text = $args['show_option_none'] ? $args['show_option_none'] : __('Choose an option', 'woocommerce');

    if(empty($options) && !empty($product) && !empty($attribute)) {
    $attributes = $product->get_variation_attributes();
    $options = $attributes[$attribute];
    }

    $radios = '<div class="variation-radios">';

    if(!empty($options)) {
    if($product && taxonomy_exists($attribute)) {
    $terms = wc_get_product_terms($product->get_id(), $attribute, array(
    'fields' => 'all',
    ));

    foreach($terms as $term) {
    if(in_array($term->slug, $options, true)) {
    $id = $name.'-'.$term->slug;
    $radios .= '<input type="radio" id="'.esc_attr($id).'" name="'.esc_attr($name).'" value="'.esc_attr($term->slug).'" '.checked(sanitize_title($args['selected']), $term->slug, false).'><label for="'.esc_attr($id).'">'.esc_html(apply_filters('woocommerce_variation_option_name', $term->name)).'</label>';
    }
    }
    } else {
    foreach($options as $option) {
    $id = $name.'-'.$option;
    $checked = sanitize_title($args['selected']) === $args['selected'] ? checked($args['selected'], sanitize_title($option), false) : checked($args['selected'], $option, false);
    $radios .= '<input type="radio" id="'.esc_attr($id).'" name="'.esc_attr($name).'" value="'.esc_attr($option).'" id="'.sanitize_title($option).'" '.$checked.'><label for="'.esc_attr($id).'">'.esc_html(apply_filters('woocommerce_variation_option_name', $option)).'</label>';
    }
    }
    }

    $radios .= '</div>';

    return $html.$radios;
    }
    add_filter('woocommerce_dropdown_variation_attribute_options_html', 'variation_radio_buttons', 20, 2);

    function variation_check($active, $variation) {
    if(!$variation->is_in_stock() && !$variation->backorders_allowed()) {
    return false;
    }
    return $active;
    }
    add_filter('woocommerce_variation_is_active', 'variation_check', 10, 2);
    这是我使用的JS:
    $(document).on('change', '.variation-radios input', function() {
    $('.variation-radios input:checked').each(function(index, element) {
    var $el = $(element);
    var thisName = $el.attr('name');
    var thisVal = $el.attr('value');
    $('select[name="'+thisName+'"]').val(thisVal).trigger('change');
    });
    });
    $(document).on('woocommerce_update_variation_values', function() {
    $('.variation-radios input').each(function(index, element) {
    var $el = $(element);
    var thisName = $el.attr('name');
    var thisVal = $el.attr('value');
    $el.removeAttr('disabled');
    if($('select[name="'+thisName+'"] option[value="'+thisVal+'"]').is(':disabled')) {
    $el.prop('disabled', true);
    }
    });
    });

    关于wordpress - WooCommerce 变体作为单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36219833/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com