![](/img/trans.png)
[英]Display a custom div block for woocommerce out of stock product variations
[英]Custom display based on Woocommerce product variations stock data checkbox option
我正在嘗試根據庫存數量和庫存狀態向變體產品添加自定義消息。
到目前為止,我得到了這個:
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;
}
由於我們真的不知道您如何設置自定義狀態“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']
對代碼進行必要的其他更改,以獲得所需的顯示。
您可以獲得代碼狀態謊言:
// 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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.