在Woocommerce中,我在后端为我的产品添加了额外的价格字段 "bestprice"
。
所以现在我有尽可能的价格设置:
100$
),bestprice
(例如 90$
)我想在产品页面中添加一个按钮“点击以获得更好的价格”。通常,产品页面中的价格将常规价格。
100$
的1个商品将添加到购物车中。bestprice
90 $ ),并且当他按下添加到购物车中 90$
的产品将添加到购物车中。对此有任何帮助将不胜感激。
答案 0 :(得分:1)
以下是完整的解决方案代码...我已使用_bestprice
替换了您的自定义字段slug,因为它应该以{{1}}或_price
这样的下划线开头。
在简单产品的后端,附加“最佳价格”自定义字段:
_sale_price
在单个商品页面中,我们添加了自定义按钮(以及隐藏字段):
当客户点击“获取更好的价格按钮”时,显示的价格会在某种价格范围内发生变化,就像产品在销售时一样(当产品在售时,它会替换销售价格):
此处(示例)该产品正在销售中,销售价格// Add a custom field to product in backend (for testing)
add_action( 'woocommerce_product_options_pricing', 'add_field_product_options_pricing' );
function add_field_product_options_pricing() {
global $post;
echo '<div class="options_group">';
woocommerce_wp_text_input( array(
'id' => '_bestprice',
'label' => __('Best price', 'woocommerce') . ' (' . get_woocommerce_currency_symbol() . ')',
'placeholder' => __('Set the best price…', 'woocommerce'),
'description' => __('Enter the custom value here.', 'woocommerce'),
'desc_tip' => 'true',
));
echo '</div>';
}
// Save product custom field to database when submitted in Backend (for testing)
add_action( 'woocommerce_process_product_meta', 'save_product_options_custom_fields', 30, 1 );
function save_product_options_custom_fields( $post_id ){
// Saving custom field value
if( isset( $_POST['_bestprice'] ) ){
update_post_meta( $post_id, '_bestprice', sanitize_text_field( $_POST['_bestprice'] ) );
}
}
将被最佳价格$32.00
取代。
$30.00
数据被添加到购物车对象,并在启用“bestprice”时更改购物车商品价格:
// Add a 'Get better price' additional button and a hidden field below single add to cart button
add_action( 'woocommerce_after_add_to_cart_button', 'before_add_to_cart_button' );
function before_add_to_cart_button() {
global $product;
// Get your product 'bestpprice' custom field
$bestprice = get_post_meta( $product->get_id(), '_bestprice', true);
if( ! empty($bestprice) ):
$bestprice = wc_get_price_to_display( $product, array( 'price' => $bestprice ) );
$reg_price = wc_get_price_to_display( $product, array( 'price' => $product->get_regular_price() ) );
$range = wc_format_sale_price( $reg_price, $bestprice );
?>
<!-- The button and hidden field -->
<div class="bestprice-wrapper"><br>
<a href="" class="get_bestprice button alt" id="get_bestprice"><?php _e('Get better price'); ?></a>
<input type="hidden" name="bestprice" id="bestprice" class="bestprice" value="" />
</div>
<!-- The jQuery code -->
<script type="text/javascript">
(function($){
var b = '<?php echo $bestprice; ?>',
i = 'input[name=bestprice]',
p = 'p.price',
r = '<?php echo $range; ?>',
t = 'a#get_bestprice'
u = true;
$(t).click( function(e){
e.preventDefault();
if(u){
$(p).html(r); // Replacing price with the range
$(i).val(b); // Set the best price in hidden input field
u = false; // Disable button
$(t).text('Better Price active'); // change button text
$(t).removeClass('alt'); // Remove button 'alt' class for styling
}
});
})(jQuery);
</script>
<?php
endif;
}
在产品设置选项中设置 bestprice 时,这是一个可选代码,可通过商店和存档页面中的产品链接更改添加到购物车链接:< / p>
// Add custom fields data to cart items
add_filter( 'woocommerce_add_cart_item_data', 'custom_add_cart_item_data', 20, 2 );
function custom_add_cart_item_data( $cart_item, $product_id ){
if( ! isset( $_POST['bestprice'] ) )
return $cart_item;
if( ! empty( $_POST['bestprice'] ) )
$cart_item['custom_data']['bestprice'] = (float) esc_attr( $_POST['bestprice'] );
return $cart_item;
}
// Replacing cart item price with 'bestprice'
add_action( 'woocommerce_before_calculate_totals', 'set_cart_item_bestprice', 20, 1 );
function set_cart_item_bestprice( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ){
if( isset( $cart_item['custom_data']['bestprice'] ) ){
// Set the calculated item price (if there is one)
$cart_item['data']->set_price( (float) $cart_item['custom_data']['bestprice'] );
}
}
}
代码进入活动子主题(或活动主题)的function.php文件。经过测试和工作。