wordpress 在Woocommerce的下拉变化属性选项中显示价格和库存状态

dwbf0jvd  于 2022-11-22  发布在  WordPress
关注(0)|答案(2)|浏览(201)

在woocommerce上我的可变产品每个变化都有具体的价格。
如何在属性下拉选项中显示变化价格和库存状态?

tyg4sfes

tyg4sfes1#

注:仅当只有一个下拉选择字段(即变量产品中设置的变量的一个属性)时,此选项才起作用。对于多个属性(即多个下拉选择字段),它会根据变量库存状态属性条款组合显示可能错误的内容。

下面的代码将在一个唯一的下拉变量属性选项中显示变量价格和库存状态:

// Utility function to get the price or the stock status of a variation from it's attribute value
function get_variation_price_stock_string( $product, $name, $term_slug ){
    foreach ( $product->get_available_variations() as $variation ){
        if($variation['attributes'][$name] == $term_slug ){
            $stock_status = $variation['is_in_stock'] == 1 ? __('In stock') : __('Out of stock');
            return ' (' . strip_tags( $variation['price_html'] ) . ') ' . $stock_status;
        }
    }
}

// Add the price and stock status to the dropdown options items.
add_filter( 'woocommerce_dropdown_variation_attribute_options_html', 'show_stock_status_in_dropdown', 10, 2);
function show_stock_status_in_dropdown( $html, $args ) {
    // Only if there is a unique variation attribute (one dropdown)
    if( sizeof($args['product']->get_variation_attributes()) == 1 ) :

    $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      = $args['show_option_none'] ? true : false;
    $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 ];
    }

    $html = '<select id="' . esc_attr( $id ) . '" class="' . esc_attr( $class ) . '" name="' . esc_attr( $name ) . '" data-attribute_name="attribute_' . esc_attr( sanitize_title( $attribute ) ) . '" data-show_option_none="' . ( $show_option_none ? 'yes' : 'no' ) . '">';
    $html .= '<option value="">' . esc_html( $show_option_none_text ) . '</option>';

    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 ) ) {
                    // Get the price and stock status
                    $price_stock_html = get_variation_price_stock_string( $product, $name, $term->slug );
                    // Insert the price and stock status
                    $html .= '<option value="' . esc_attr( $term->slug ) . '" ' . selected( sanitize_title( $args['selected'] ), $term->slug, false ) . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $term->name ) . $price_stock_html  ) . '</option>';
                }
            }
        } else {
            foreach ( $options as $option ) {
                $selected = sanitize_title( $args['selected'] ) === $args['selected'] ? selected( $args['selected'], sanitize_title( $option ), false ) : selected( $args['selected'], $option, false );
                // Get the price and stock status
                $price_stock_html = get_variation_price_stock_string( $product, $name, $term->slug );
                // Insert the price and stock status
                $html .= '<option value="' . esc_attr( $option ) . '" ' . $selected . '>' . esc_html( apply_filters( 'woocommerce_variation_option_name', $option ) . $price_stock_html ) . '</option>';
            }
        }
    }
    $html .= '</select>';

    endif;

    return $html;
}

代码进入您的活动子主题(或活动主题)的function.php文件。

依据:

  • 在Woocommerce中添加可变价格到可变产品下拉列表项目名称
  • 如何添加变化库存状态到Woocommerce产品变化下拉列表
0h4hbjxa

0h4hbjxa2#

enter image description hereprice and stock status in dropdown显示器

强文本stack.imgur.com/yvBUH.jpg

非常感谢你的这个(非常快)回复。我使用Flatsome主题,效果很好。作为附加问题:是否有机会将“In Stock”转换为“Verfügbar / in Stock”,将“Out of Stock”转换为“Ausverkauft / Out of Stock”?我们有来自德国和其他欧盟国家的客户;他们中的大多数人会理解的。但是如果我不能用德语提供一些简短的单词,我的德国老客户将面临问题。谢谢你工作ct

相关问题