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

玛蒂亚斯·贝克(Mathias Beck)

我试图根据产品的库存数量和库存状态向其添加自定义消息。

到目前为止,我得到了:

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;
}

它可以工作,并根据每个变化的数量显示消息,但是我需要它仅适用于一种类型的库存状态(自定义)。我将需要针对不同的库存状态显示不同的消息。这是我尝试过的:

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文件中:

<div class="woocommerce-variation-custom-text-field">{{{ data.variation.text_field }}}</div>

任何帮助或指向正确方向的表示赞赏。

编辑:这是我的最新尝试,因为我的自定义库存状态存储在“ _stock_status”元值中。仍然不起作用。

    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;
    }
LoicTheAztec

由于我们真的不知道您如何将自定义状态设置为“ bettingingsvare”,因此无法重现该问题。下次,应该necessary在您的问题中添加所有相关代码。

因此,这是一个类似的工作解决方案,在您的产品变体有一个额外的自定义设置,可用于real

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

<div class="woocommerce-variation-delivery">{{{ data.variation.delivery_html }}}</div>

然后再看完整的代码:

// 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-product/add-to-cart/variation.php模板,因为不再需要它,您将在最后一个函数中进行替换

$variation_data['delivery_html']

通过

$variation_data['availability_html']

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在 Woocommerce 的前端显示自定义单选和复选框产品设置数据

向WooCommerce产品变体选项中添加自定义复选框

自定义复选框显示或隐藏Woocommerce结帐中的自定义通知

更改Woocommerce购物车项目价格的产品自定义复选框选项

Woocommerce中管理员编辑产品的复选框自定义字段

显示woocommerce缺货产品变体的自定义div块

产品设置中的“自定义”复选框,选中后会显示一个自定义字段

通过WooCommerce产品设置中的自定义复选框将类添加到WooCommerce页面

在WooCommerce Thankyou页面上显示自定义复选框字段状态

基于WooCommerce产品的当前库存值的自定义库存字段计算

获取自定义复选框以正确显示

Bootstrap 4自定义复选框未显示

通过WooCommerce产品设置中的自定义复选框禁用添加到购物车按钮

WooCommerce 中特定产品类别的自定义条款和条件复选框

自定义复选框问题

自定义Android复选框

自定义Bootstrap复选框

将产品变体的自定义字段值显示到WooCommerce中的“自定义产品”选项卡

在WooCommerce自定义产品类型上显示库存状态

在Woocommerce订单和电子邮件中显示产品变体的自定义字段

在Woocommerce购物车上显示产品变体的自定义字段

在Woocommerce变量产品的变体描述之前自定义显示

XCode自定义模板-仅复选框的文件夹结构(在其中放置变体“复选框未打勾”)?

WooCommerce 产品变体下拉菜单的自定义 HTML

在 Woocommerce 中自定义功能变体产品

在管理面板中向woocommerce quickedit添加自定义复选框

无法保存WooCommerce结帐的自定义复选框值

自定义复选框,在WooCommerce购物车页面中添加费用

Woocommerce变量订阅自定义字段复选框设置为默认未选中