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产品的主要内容,如果未能解决你的问题,请参考以下文章