在 WooCommerce 中,我想创建一个函数,为每个变体或可变产品输出一个简单的数据“列表”。或者,如果是一个简单的产品,那么该产品本身的细节。我需要为每个项目添加的详细信息是:regular price
, size attribute
(用于变体)sale price
, stock
.
这是针对 WooCommerce 产品页面的“目录”版本,因此不会有实际的“添加到购物车”按钮或“变体”下拉列表。相反,我想呈现以下信息each向用户提供的产品/变体。
我需要输出每个数据,作为列表项<ul>
. A new <ul>
对于每个变体。
具有 3 种变体的产品示例:
<div class="fs-product-data-wrapper">
<ul>
<li class="fs-data-price">$49.98 ea.</li>
<li class="fs-data-size">Size: 15-18"</li>
<li class="fs-data-sale">$49.98 ea. Preferred Customer Price</li>
<li class="fs-data-stock">Quantity in Stock: 40</li>
</ul>
<ul>
<li class="fs-data-price">$799.98 ea.</li>
<li class="fs-data-size">Size: 2-2.5'</li>
<li class="fs-data-sale">$67.98 ea. Preferred Customer Price</li>
<li class="fs-data-stock">Quantity in Stock: 15</li>
</ul>
<ul>
<li class="fs-data-price">$29.98 ea.</li>
<li class="fs-data-size">Size: 12"</li>
<li class="fs-data-sale">$19.98 ea. Preferred Customer Price</li>
<li class="fs-data-stock">Quantity in Stock: 0</li>
</ul>
</div>
没有变化的产品示例,只是一个简单的产品:
<div class="fs-product-data-wrapper">
<ul>
<li class="fs-data-price">$99.98 ea.</li>
<li class="fs-data-size">Size: 15-18"</li>
<li class="fs-data-sale">$99.98 ea. Preferred Customer Price</li>
<li class="fs-data-stock">Quantity in Stock: 32</li>
</ul>
</div>
示例截图:
我可以管理它的CSS。我只需要能够在一段时间内生成这些数据ul
对于每个“选项”。理想情况下,这也可以通过短代码完成,因为我将通过页面构建器模板填充它。但如果它挂接到现有的产品页面挂钩上,我就可以做到。也许woocommerce_after_single_product
.
以下是一种显示简单和可变产品的一些特定格式的产品数据的方法:
// Utility funtion: getting and formtting product data
function format_product_data_output( $the_id ){
$empty = __( '<em>(empty)</em>', 'woocommerce' );
// Get an instance of the WC_Product_Variation object
$product = wc_get_product( $the_id );
// Only wc_get_price_to_display() respect if product is to be displayed with or without including taxes
$price = wc_price( wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) ) );
$sale_price = wc_get_price_to_display( $product, array( 'price' => $product->get_sale_price() ) );
$sale_price = ! empty( $sale_price ) ? wc_price($sale_price) : $empty;
$size = $product->get_attribute( 'pa_size' );
$size = ! empty( $size ) ? get_term_by( 'slug', $size, 'pa_size' )->name : $empty;
$stock_qty = $product->get_stock_quantity();
$stock_qty = ! empty( $stock_qty ) ? $stock_qty : $empty;
$output = '
<ul>
<li class="fs-data-price">'.$price.'</li>
<li class="fs-data-size">Size: '.$size.'</li>
<li class="fs-data-sale">'.$sale_price.' Preferred Customer Price</li>
<li class="fs-data-stock">Quantity in Stock: '.$stock_qty.'</li>
</ul>';
return $output;
}
//
add_action( 'woocommerce_after_single_product', 'custom_table_after_single_product' );
function custom_table_after_single_product(){
global $product;
$output = '<div class="fs-product-data-wrapper">';
// Variable products
if( $product->is_type('variable'))
{
// Get available variations in the variable product
$available_variations = $product->get_available_variations();
if( count($available_variations) > 0 ){
foreach( $available_variations as $variation )
$output .= format_product_data_output( $variation['variation_id'] );
}
}
// Simple products
elseif( $product->is_type('simple'))
{
$output .= format_product_data_output( $product->get_id() );
}
else return; // Exit
echo $output .= '</div>'; // Display
}
代码位于活动子主题(或活动主题)的 function.php 文件中。经过测试并有效。
你必须管理CSS(可能还有一些小细节)。需要的东西大部分都在那里。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)