Replies: 0
I found this very helpful resource:
https://docs.wclovers.com/tweaks/#vendor-order-threshold-amount
This gets me 95% of the way to where I need to be, but what I’m finding is that the administrator user is unable to actually change the setting in the vendors settings panel to set the minimum order value.
I’ve actually made a slight modification to the snippet and changed it so that the customer must order a minimum of x products as opposed to a value of $x.
Thanks in advanced for any assistance.
Here is my code that makes the change:
add_action( 'end_wcfm_vendor_settings', function( $vendor_id ) {
global $WCFM, $WCFMmp;
$wcfm_min_order_amt = get_user_meta( $vendor_id, '_wcfm_min_order_amt', true );
?>
<div class="page_collapsible" id="wcfm_settings_form_min_order_amount_head">
<label class="wcfmfa fa-cart-plus"></label>
<?php _e('Min Order Amount', 'wc-frontend-manager'); ?><span></span>
</div>
<div class="wcfm-container">
<div id="wcfm_settings_form_vendor_invoice_expander" class="wcfm-content">
<?php
$WCFM->wcfm_fields->wcfm_generate_form_field( array(
"_wcfm_min_order_amt" => array('label' => __('Minimum Amount', 'wc-frontend-manager'), 'type' => 'number', 'class' => 'wcfm-text wcfm_non_negative_input wcfm_ele', 'label_class' => 'wcfm_title wcfm_ele', 'value' => $wcfm_min_order_amt ),
) );
?>
</div>
</div>
<div class="wcfm_clearfix"></div>
<?php
}, 500 );
add_filter( 'wcfm_marketplace_settings_fields_general', function( $setting_fields, $vendor_id ) {
if( !wcfm_is_vendor() ) {
$wcfm_min_order_amt = get_user_meta( $vendor_id, '_wcfm_min_order_amt', true );
$wcfm_min_order_amt_field = array(
"_wcfm_min_order_amt" => array('label' => __('Minimum Amount', 'wc-frontend-manager'), 'type' => 'number', 'class' => 'wcfm-text wcfm_non_negative_input wcfm_ele', 'label_class' => 'wcfm_title wcfm_ele', 'value' => $wcfm_min_order_amt ),
);
$setting_fields = array_merge( $wcfm_min_order_amt_field, $setting_fields );
}
return $setting_fields;
}, 50, 2 );
add_action( 'woocommerce_single_product_summary', function() {
global $WCFM, $WCFMmp, $post;
$vendor_id = 0;
$product_id = 0;
if( is_product() && $post && is_object( $post ) ) {
$product_id = $post->ID;
}
if( !$product_id ) return;
$vendor_id = wcfm_get_vendor_id_by_post( $product_id );
if( !$vendor_id ) return;
$wcfm_min_order_amt = get_user_meta( $vendor_id, '_wcfm_min_order_amt', true );
if( !$wcfm_min_order_amt ) return;
echo '<div class="wcfm_clearfix"></div><div class="wcfmmp_shipment_processing_display">'. __( 'Minimum order amount should be ', 'wc-multivendor-marketplace' ) . ' ' . wc_price( $wcfm_min_order_amt ) .'</div><div class="wcfm_clearfix"></div>';
}, 35 );
add_action( 'wcfm_vendor_settings_update', function( $vendor_id, $wcfm_settings_form ) {
global $WCFM, $WCFMmp;
if( isset( $wcfm_settings_form['_wcfm_min_order_amt'] ) ) {
$wcfm_min_order_amt = $wcfm_settings_form['_wcfm_min_order_amt'];
update_user_meta( $vendor_id, '_wcfm_min_order_amt', $wcfm_min_order_amt );
}
}, 500, 2 );
add_action( 'woocommerce_check_cart_items', function() {
global $WCFM, $WCFMmp;
$return = true;
if( is_cart() || is_checkout() ) {
$vendor_wise_cart_total = array();
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
$cart_product_id = $cart_item['product_id'];
$cart_product = get_post( $cart_product_id );
if( !isset( $vendor_wise_cart_total[$cart_product->post_author] ) ) $vendor_wise_cart_total[$cart_product->post_author] = 0;
$vendor_wise_cart_total[$cart_product->post_author] += $cart_item['quantity'];
}
if( !empty( $vendor_wise_cart_total ) ) {
foreach( $vendor_wise_cart_total as $vendor_id => $cart_total ) {
if( wcfm_is_vendor( $vendor_id ) ) {
$wcfm_min_order_amt = get_user_meta( $vendor_id, '_wcfm_min_order_amt', true );
if( $wcfm_min_order_amt && ( $wcfm_min_order_amt > $cart_total ) ) {
wc_clear_notices();
$vendor_label = wcfm_get_vendor_store( $vendor_id ) . ' ' . apply_filters( 'wcfm_sold_by_label', $vendor_id, __( 'Store', 'wc-frontend-manager' ) );
wc_add_notice( sprintf( __( "%s minimum order amount should be %u, please add %u item from this store!", "wc-frontend-manager" ), $vendor_label, $wcfm_min_order_amt, $wcfm_min_order_amt - $cart_total ), 'error' );
$return = false;
break;
}
}
}
}
}
return $return;
}, 1000 );