根据商品自定义字段的最高值在购物车和结帐页面上添加通知 [英] Adding a notice on Cart and checkout page based on item custom field highest value
问题描述
我为每个产品都有一个自定义字段值。此自定义字段使用以下代码插入:
<?php
//插入自定义管理字段
add_action('woocommerce_product_options_general_product_data','woo_add_custom_general_fields');
函数woo_add_custom_general_fields(){
echo’< div class = options_group>’;
woocommerce_wp_text_input(array(
'id'=>'days_manufacture',
'label'=> __('制造天数','woocommerce'),
'placeholder'=>'',
'description'=> __('Insert here','woocommerce'),
'type'=>'number',
'custom_attributes'=> array(
'step'=>'any',
'min'=>'1'
),
));
echo‘< / div>’;
}
//保存字段
add_action('woocommerce_process_product_meta','woo_add_custom_general_fields_save');
函数woo_add_custom_general_fields_save($ post_id){
$ woocommerce_number_field = $ _POST [’days_manufacture’];
if(!empty($ woocommerce_number_field))
update_post_meta($ post_id,'days_manufacture',esc_attr($ woocommerce_number_field));;
}
//存储自定义字段
add_action('woocommerce_add_cart_item_data','save_days_field',10,2);
函数save_days_field($ cart_item_data,$ product_id){
$ special_item = get_post_meta($ product_id,‘days_manufacture’,true);
if(!empty($ special_item)){
$ cart_item_data [‘days_manufacture’] = $ special_item;
//下面的语句确保将添加到购物车操作中的每个操作作为唯一行项
$ cart_item_data ['unique_key'] = md5(microtime()。rand());
WC()->会话-> set('days_manufacture',$ special_item);
}
返回$ cart_item_data;
}
//在购物车上渲染元数据并结帐
add_filter(``woocommerce_get_item_data, rendering_meta_field_on_cart_and_checkout,10,2);
函数rendering_meta_field_on_cart_and_checkout($ cart_data,$ cart_item){
$ custom_items = array();
// Woo 2.4.2更新
if(!empty($ cart_data)){
$ custom_items = $ cart_data;
}
if(isset($ cart_item ['days_manufacture'])){
$ custom_items [] = array( name => __( Days, woocommerce) , value => $ cart_item ['days_manufacture']);
}
返回$ custom_items;
}吗?
此代码可正常工作。
现在我希望在购物车和结帐(优惠券通知前)页面上,当购物车中有多个项目时,如一条截图所示,在自定义消息中显示此自定义字段(days_manufacture)的最大值。 / p>
我该如何实现?
谢谢。
这是一个自定义函数,它将在购物车和结帐时显示一条消息(在优惠券通知前)页的制造天数最多……
这里是代码:
add_action('woocommerce_before_cart','days_of_manufacture');
add_action(‘woocommerce_before_checkout_form’,‘days_of_manufacture’,5);
函数days_of_manufacture(){
$ day_txt =’。 __(天, your_theme_domain_slug);
$ days_txt =‘’。 __(天, your_theme_domain_slug);
$ text = __(您的订单将在以下位置生成:, your_theme_domain_slug);
$ max_days = 0;
foreach(WC()-> cart-> get_cart()as $ cart_item)
if($ cart_item ['days_manufacture']> $ max_days)
$ max_days = $ cart_item ['days_manufacture'];
if($ max_days!= 0){
if($ max_days == 1)
$ days_txt = $ day_txt;
$ output = $ text。 $ max_days。 $ days_txt;
echo< div class =‘woocommerce-info’> $ output< / div>;
}
}
此代码在function.php文件中
此代码已经过测试并且可以正常工作。
I have a a custom field value for each product. This custom field is inserted with the code below :
<?php
// Insert a Custom Admin Field
add_action( 'woocommerce_product_options_general_product_data', 'woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
echo '<div class="options_group">';
woocommerce_wp_text_input( array(
'id' => 'days_manufacture',
'label' => __( 'Days for Manufacture', 'woocommerce' ),
'placeholder' => '',
'description' => __( 'Insert here', 'woocommerce' ),
'type' => 'number',
'custom_attributes' => array(
'step' => 'any',
'min' => '1'
),
) );
echo '</div>';
}
// Save the field
add_action( 'woocommerce_process_product_meta', 'woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
$woocommerce_number_field = $_POST['days_manufacture'];
if( !empty( $woocommerce_number_field ) )
update_post_meta( $post_id, 'days_manufacture', esc_attr( $woocommerce_number_field ) );
}
// Store custom field
add_action( 'woocommerce_add_cart_item_data', 'save_days_field', 10, 2 );
function save_days_field( $cart_item_data, $product_id ) {
$special_item = get_post_meta( $product_id , 'days_manufacture',true );
if(!empty($special_item)) {
$cart_item_data[ 'days_manufacture' ] = $special_item;
// below statement make sure every add to cart action as unique line item
$cart_item_data['unique_key'] = md5( microtime().rand() );
WC()->session->set( 'days_manufacture', $special_item );
}
return $cart_item_data;
}
// Render meta on cart and checkout
add_filter( 'woocommerce_get_item_data', 'rendering_meta_field_on_cart_and_checkout', 10, 2 );
function rendering_meta_field_on_cart_and_checkout( $cart_data, $cart_item ) {
$custom_items = array();
// Woo 2.4.2 updates
if( !empty( $cart_data ) ) {
$custom_items = $cart_data;
}
if( isset( $cart_item['days_manufacture'] ) ) {
$custom_items[] = array( "name" => __( "Days", "woocommerce" ), "value" => $cart_item['days_manufacture'] );
}
return $custom_items;
} ?>
This code works perfectly.
Now I would like on Cart and checkout (before coupon notice) pages to display the highest value of this custom field (days_manufacture) on a custom message, when multiple items are in Cart, like in this screenshot.
How can I achieve this?
Thanks.
Here is a custom function that will display a message on cart and checkout (before coupon notice) pages with the highest number of days of manufacture…
Here is the code:
add_action('woocommerce_before_cart', 'days_of_manufacture');
add_action('woocommerce_before_checkout_form', 'days_of_manufacture', 5);
function days_of_manufacture() {
$day_txt = ' ' . __('day', 'your_theme_domain_slug' );
$days_txt = ' ' . __('days', 'your_theme_domain_slug' );
$text = __('Your Order will be produced in: ', 'your_theme_domain_slug' );
$max_days = 0;
foreach( WC()->cart->get_cart() as $cart_item )
if($cart_item['days_manufacture'] > $max_days)
$max_days = $cart_item['days_manufacture'];
if($max_days != 0) {
if ($max_days == 1)
$days_txt = $day_txt;
$output = $text . $max_days . $days_txt;
echo "<div class='woocommerce-info'>$output</div>";
}
}
This code goes in function.php file of your active child theme (or theme) or also in any plugin file.
This code is tested and works.
这篇关于根据商品自定义字段的最高值在购物车和结帐页面上添加通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!