php - Woocommerce可变产品的变体描述之前的自定义显示
问题描述
我需要在 woocommerce中的变体产品描述之前添加自己的价格表。我通过自定义class-wc-product-variable.php的get_available_variation函数来做到这一点,该函数位于 woocommerce 的包含目录中。
我不想覆盖这个插件,因为更新后更改会丢失。
如何在不破解 woocommerce 的情况下修改此功能?
public function get_available_variation( $variation ) {
if ( is_numeric( $variation ) ) {
$variation = wc_get_product( $variation );
}
if ( ! $variation instanceof WC_Product_Variation ) {
return false;
}
// See if prices should be shown for each variation after selection.
$show_variation_price = apply_filters( 'woocommerce_show_variation_price', $variation->get_price() === '' || $this->get_variation_sale_price( 'min' ) !== $this->get_variation_sale_price( 'max' ) || $this->get_variation_regular_price( 'min' ) !== $this->get_variation_regular_price( 'max' ), $this, $variation );
return apply_filters(
'woocommerce_available_variation', array(
'attributes' => $variation->get_variation_attributes(),
'availability_html' => wc_get_stock_html( $variation ),
'backorders_allowed' => $variation->backorders_allowed(),
'dimensions' => $variation->get_dimensions( false ),
'dimensions_html' => wc_format_dimensions( $variation->get_dimensions( false ) ),
'display_price' => wc_get_price_to_display( $variation ),
'display_regular_price' => wc_get_price_to_display( $variation, array( 'price' => $variation->get_regular_price() ) ),
'image' => wc_get_product_attachment_props( $variation->get_image_id() ),
'image_id' => $variation->get_image_id(),
'is_downloadable' => $variation->is_downloadable(),
'is_in_stock' => $variation->is_in_stock(),
'is_purchasable' => $variation->is_purchasable(),
'is_sold_individually' => $variation->is_sold_individually() ? 'yes' : 'no',
'is_virtual' => $variation->is_virtual(),
'max_qty' => 0 < $variation->get_max_purchase_quantity() ? $variation->get_max_purchase_quantity() : '',
'min_qty' => $variation->get_min_purchase_quantity(),
'price_html' => $show_variation_price ? '<span class="price">' . $variation->get_price_html() . '</span>' : '',
'sku' => $variation->get_sku(),
'variation_description' => CUSTOM_PRICE_TABLE($variation) . wc_format_content( $variation->get_description() ),
'variation_id' => $variation->get_id(),
'variation_is_active' => $variation->variation_is_active(),
'variation_is_visible' => $variation->variation_is_visible(),
'weight' => $variation->get_weight(),
'weight_html' => wc_format_weight( $variation->get_weight() ),
), $this, $variation
);
}
我必须做的唯一更改是在变体描述中添加“CUSTOM_PRICE_TABLE ($ Variation)”。
解决方案
您只需要以这种方式使用 woocommerce_available_variation 过滤器挂钩:
add_filter( 'woocommerce_available_variation', 'form_to_out_of_stock_product_variations', 10, 3 );
function form_to_out_of_stock_product_variations( $data, $product, $variation ) {
if( CUSTOM_PRICE_TABLE($variation) )
$data['variation_description'] = CUSTOM_PRICE_TABLE($variation) . $data['variation_description'],
return $data;
}
代码位于您的活动子主题(或活动主题)的 function.php 文件中。它应该有效。
推荐阅读
- maven - 带有依赖项的 Maven POM 打包
- python - 启动分段上传到 S3 版本 4 方法不允许 err.code 405
- ruby - Ruby Dropdown 选择基于第一个字符
- quartz-scheduler - Quartz RescheduleJob 正在为我创造新工作,而不是像预期的那样做
- angularjs - isNumber 或 isObject 不适用于 ng-repeat
- mysql - Codeigniter-count 一行中的空列数
- sql - 如何将目标表中尚不存在的行从另一个表插入到一个表中?
- firebase-realtime-database - Flutter Firebase 数据库持久性不起作用
- python - Python:以非侵入方式处理 XML 文件
- javascript - 使用 babel-node 和 babel 7 构建 nuxtjs