首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Woocommerce产品变体数据复选框选项的自定义显示

基于Woocommerce产品变体数据复选框选项的自定义显示
EN

Stack Overflow用户
提问于 2018-07-20 10:35:21
回答 2查看 1K关注 0票数 1

我试图添加一个自定义的消息,根据他们的库存数量和库存状况的变化产品。

到目前为止我得到了这个:

代码语言:javascript
运行
复制
function load_variation_settings_fields( $variation_data, $product, $variation ) {

    // Display shipping delay text when stock quantity exist
    if( $variation->get_stock_quantity() > 0 )
        $variation_data['text_field'] = __('<p class="stock in-stock">Stock: <span>På lager</span><br>Delivery: <span>2-12 hverdage</span></p>'); 
    else $variation_data['text_field'] = __('<p class="stock in-stock">Stock: <span>Out of stock</span><br>Delivery: <span>4-6 weeks</span></p>');

    return $variation_data;
}

它可以工作,并根据每个变化的数量显示消息,但我需要这样做才能处理一种类型的库存状态(自定义的)。对于不同的股票状态,我需要显示不同的信息。这就是我尝试过的:

代码语言:javascript
运行
复制
function load_variation_settings_fields( $variation_data, $product, $variation ) {

    // Display shipping delay text when stock quantity exist
    if( $variation->get_stock_quantity() > 0 && ($stockstatus == 'customstatus'))
        $variation_data['text_field'] = __('<p class="stock in-stock">Stock: <span>In stock</span><br>Delivery: <span>2-12 days</span></p>'); 
    elseif ( ($stockstatus == 'customstatus') )
    $variation_data['text_field'] = __('<p class="stock in-stock">Stock: <span>Out of stock</span><br>Delivery: <span>4-6 weeks</span></p>');

    return $variation_data;
}

它以如下方式显示在variation.php文件中:

代码语言:javascript
运行
复制
<div class="woocommerce-variation-custom-text-field">{{{ data.variation.text_field }}}</div>

任何帮助或指向正确的方向,我们将不胜感激。

编辑:--这是我的最新尝试,因为我的自定义股票状态存储在'_stock_status‘元值中。但还是没有用。

代码语言:javascript
运行
复制
    function load_variation_settings_fields( $variation_data, $product, $variation ) {
    $stockstatus = $product->get_attribute( '_stock_status' );
if( ($stockstatus == 'bestillingsvare') ) {
        // Display shipping delay text when stock quantity exist
        if( $variation->get_stock_quantity() > 0 )
            $variation_data['text_field'] = __('<p class="stock in-stock">Stock: <span>På lager</span><br>Delivery: <span>2-12 hverdage</span></p>'); 
        else $variation_data['text_field'] = __('<p class="stock in-stock">Stock: <span>Out of stock</span><br>Delivery: <span>4-6 weeks</span></p>');
  }
        return $variation_data;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-20 19:21:21

由于我们不知道您如何设置您的自定义状态“bestillingsvare”,因此不可能重现此问题。下一次,应该是necessary在您的问题中添加所有相关代码。

下面是一个类似的工作解决方案,在您的产品变体中有一个额外的自定义设置,用于真正的

首先,您需要在/single-product/add-to-cart/variation.php模板文件中添加以下行:

代码语言:javascript
运行
复制
<div class="woocommerce-variation-delivery">{{{ data.variation.delivery_html }}}</div>

然后,重新检查完整的代码:

代码语言:javascript
运行
复制
// Add variation custom checkbox setting option field
add_action( 'woocommerce_variation_options', 'add_variation_delivery_status_option', 20, 3 );
function add_variation_delivery_status_option ( $loop, $variation_data, $post_object ) {
    $checked = get_post_meta( $post_object->ID, '_delivery_option', true ) ? true : false;
    ?>
    <label class="tips" data-tip="<?php _e( 'Enable', 'woocommerce' ); ?>">
    <?php _e( 'Delivery?', 'woocommerce' ); ?>
        <input type="checkbox" class="checkbox variation_delivery_option" name="delivery_option_<?php
        echo $loop; ?>" <?php checked( $checked, true ); ?> />
    </label>
    <?php
}

// Save variation custom checkbox setting option field value
add_action( 'woocommerce_save_product_variation', 'save_variation_delivery_status_option', 20, 2 );
function save_variation_delivery_status_option( $variation_id, $i ) {
    $value = isset( $_POST['delivery_option_'.$i] ) ? true : false;
    update_post_meta( $variation_id, '_delivery_option', $value );
}

// Display in front end the delivery info
add_filter( 'woocommerce_available_variation', 'display_variation_delivery_status_option', 20, 3 );
function display_variation_delivery_status_option( $variation_data, $product, $variation ) {
    if( get_post_meta( $variation->get_id(), '_delivery_option', true ) ) {
        $stock_qty      = $variation->get_stock_quantity();

        $stock_class    = $stock_qty > 0 ? 'stock in-stock' : 'stock out-of-stock';
        $stock_label    = $stock_qty > 0 ? __('På lager') : __('Out of stock');
        $delivery_delay = $stock_qty > 0 ? __('2-12 hverdage') : __('4-6 weeks');

        // Display a shipping delay text when stock quantity exist
        $variation_data['delivery_html'] = sprintf(
            '<p class="%s">' . __('Stock') . ': <span>%s</span><br>
            ' . __('Delivery') . ': <span>%s</span></p>',
            $stock_class, $stock_label, $delivery_delay
        );
    }
    return $variation_data;
}

代码在您的活动子主题(或活动主题)的function.php文件中。应该管用的。

在后端变化设置中(启用交付选项):

在前端期权中,当“股票”激活时:

在前端期权中,当“缺货”时激活:

但是,当您看到以避免重复的信息时,您可以使用现有的availability_html来更改显示的数据,将您的传递信息添加到其中。

在这种情况下,您将不再需要/single/add/variation.php模板,并将在最后一个函数中替换它。

代码语言:javascript
运行
复制
$variation_data['delivery_html']

通过

代码语言:javascript
运行
复制
$variation_data['availability_html']

对代码进行必要的其他更改,以获得所需的显示。

票数 1
EN

Stack Overflow用户

发布于 2018-07-20 14:02:43

你可以得到代码状态谎言:

代码语言:javascript
运行
复制
// Compatibility for WC versions from 2.5.x to 3.0+
if ( method_exists( $product, 'get_stock_status' ) ) {
     $stockstatus = $product->get_stock_status(); // For version 3.0+
} else {
     $stockstatus = $product->stock_status; // Older than version 3.0
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51440644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档