php 最大数量par产品

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 最大数量par产品相关的知识,希望对你有一定的参考价值。

<?php
// Champ en backoffice et enregistrement en BDD

function wc_qty_add_product_field() {
	echo '<div class="options_group">';
	woocommerce_wp_text_input( 
		array( 
			'id'          => '_wc_max_qty_product', 
			'label'       => 'Quantité maximum', 
			'placeholder' => '',
			'desc_tip'    => 'true',
			'description' => 'Optionnel. Permet de définir la quantité maximum autorisé par commande (ne s\'applique pas aux profils internes).' 
		)
	);
	echo '</div>';	
}
add_action( 'woocommerce_product_options_inventory_product_data', 'wc_qty_add_product_field' );

function wc_qty_save_product_field( $post_id ) {
	$val_max = trim( get_post_meta( $post_id, '_wc_max_qty_product', true ) );
	$new_max = sanitize_text_field( $_POST['_wc_max_qty_product'] );
	
	if ( $val_max != $new_max ) {
		update_post_meta( $post_id, '_wc_max_qty_product', $new_max );
	}
}
add_action( 'woocommerce_process_product_meta', 'wc_qty_save_product_field' );

// Modification de l'attribut max des inputs

function wc_qty_input_args( $args, $product ) {
	$product_id = $product->get_parent_id() ? $product->get_parent_id() : $product->get_id();
	
	$product_max = wc_get_product_max_limit( $product_id );	

	if ( ! empty( $product_max ) ) {
		if ( false !== $product_max ) {
			$args['max_value'] = $product_max;
		}
	}
	
	if ( $product->managing_stock() && ! $product->backorders_allowed() ) {
		$stock = $product->get_stock_quantity();
		$args['max_value'] = min( $stock, $args['max_value'] );	
	}
	
	return $args;
}

// Validation à l'ajout au panier

function wc_qty_add_to_cart_validation( $passed, $product_id, $quantity, $variation_id = '', $variations = '' ) {
	$product_max = wc_get_product_max_limit( $product_id );
	
	if ( ! empty( $product_max ) ) {
		if ( false !== $product_max ) {
			$new_max = $product_max;
		} else {
			return $passed;
		}
	}
	
	$already_in_cart 	= wc_qty_get_cart_qty( $product_id );
	$product 			= wc_get_product( $product_id );
	$product_title 		= $product->get_title();
	
	if ( !is_null( $new_max ) && !empty( $already_in_cart ) ) {
		
		if ( ( $already_in_cart + $quantity ) > $new_max ) {
			$passed = false;			
			wc_add_notice( apply_filters( 'isa_wc_max_qty_error_message_already_had', sprintf( __( 'Vous pouvez commander au maximum %1$s %2$s dans %3$s. Vous an avez déjà %4$s.', 'woocommerce-max-quantity' ), 
						$new_max,
						$product_title,
						'<a href="' . esc_url( wc_get_cart_url() ) . '">' . 'votre filet' . '</a>',
						$already_in_cart ),
					$new_max,
					$already_in_cart ),
			'error' );
		}
	}
	return $passed;
}

// Validation à la mise à jour du panier

function wc_qty_update_cart_validation( $passed, $cart_item_key, $values, $quantity ) {
	$product_max = wc_get_product_max_limit( $values['product_id'] );

	if ( ! empty( $product_max ) ) {
		if ( false !== $product_max ) {
			$new_max = $product_max;
		} else {
			return $passed;
		}
	}
	
	$product = wc_get_product( $values['product_id'] );
	$already_in_cart = wc_qty_get_cart_qty( $values['product_id'], $cart_item_key );
	
	if ( ( $already_in_cart + $quantity ) > $new_max ) {
		wc_add_notice( apply_filters( 'wc_qty_error_message', sprintf( __( 'Vous pouvez commander au maximum %1$s %2$s dans %3$s.', 'woocommerce-max-quantity' ),
					$new_max,
					$product->get_name(),
					'<a href="' . esc_url( wc_get_cart_url() ) . '">' . 'votre filet' . '</a>'),
				$new_max ),
		'error' );
		$passed = false;
	}

	return $passed;
}

// Functions

function wc_get_product_max_limit( $product_id ) {
	$qty = get_post_meta( $product_id, '_wc_max_qty_product', true );
	
	if ( empty( $qty ) ) {
		$limit = false;
	} else {
		$limit = (int) $qty;
	}
	
	return $limit;
}

function wc_qty_get_cart_qty( $product_id , $cart_item_key = '' ) {
	global $woocommerce;
	$running_qty = 0;

	foreach($woocommerce->cart->get_cart() as $other_cart_item_keys => $values ) {
		if ( $product_id == $values['product_id'] ) {
			if ( $cart_item_key == $other_cart_item_keys ) {
				continue;
			}
			$running_qty += (int) $values['quantity'];
		}
	}
	return $running_qty;
}

// Add filter (possibilité de mettre dans une condition pour ne pas lappliquer à tous les rôles par exemple)

add_filter( 'woocommerce_quantity_input_args', 'wc_qty_input_args', 10, 2 );
add_filter( 'woocommerce_add_to_cart_validation', 'wc_qty_add_to_cart_validation', 1, 5 );
add_filter( 'woocommerce_update_cart_validation', 'wc_qty_update_cart_validation', 1, 4 );

?>

以上是关于php 最大数量par产品的主要内容,如果未能解决你的问题,请参考以下文章

php 产品数量加载产品集合加载产品集合

PHP Magento获得产品的数量(数量)

更新产品数量(php和Mysql)

php WooCommerce:更改相关产品的数量

php 设置与woocommerce相关的产品数量

php WooCommerce |从类别中删除产品数量