【问题标题】:Custom display based on Woocommerce product variations stock data checkbox option基于 Woocommerce 产品变体库存数据复选框选项的自定义显示
【发布时间】:2018-12-28 15:41:32
【问题描述】:

我正在尝试根据库存数量和库存状态向变体产品添加自定义消息。

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

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

【问题讨论】:

    标签: php wordpress woocommerce shipping variations


    【解决方案1】:

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

    所以这里有一个类似的工作解决方案,在您的产品变体中添加了一个额外的自定义设置适用于真实

    首先,您需要在/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']
    

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

    【讨论】:

    • 非常感谢。使用您的代码,我设法让它与我自己的自定义元一起工作。
    【解决方案2】:

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

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

    【讨论】:

    • 对不起,你能再解释一下吗?我可以看到如何在此获取我的自定义状态(具有发布元值 '_stock_status')
    猜你喜欢
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2018-04-16
    • 1970-01-01
    • 2015-06-26
    • 2021-06-28
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多