javascript - tutorial - Cambiar el precio del producto en el carrito por campo personalizado, Woocommerce
reportar pago woocommerce (1)
Aquí estoy suponiendo que el lorem price
se almacena en un meta campo personalizado asociado con meta_key your_custom_meta_field
Use el siguiente código en el archivo function.php
su tema
add_action( ''woocommerce_before_calculate_totals'', ''my_custom_calculate_totals'' );
function my_custom_calculate_totals( $cart ) {
if ( ! empty( $cart->cart_contents ) ) {
$lorem_price = array();
if ( ! empty( $_REQUEST[''cart''] ) ) { // check if any of the checkboxes is checked
WC()->session->set( ''my_lorem_price'', $_REQUEST[''cart''] ); // set all checkboxes information in session
$lorem_price = $_REQUEST[''cart''];
}
if ( empty( $lorem_price ) ) {
$lorem_price = WC()->session->get( ''my_lorem_price'' ); // fetch all checkboxes information from session
}
if ( empty( $lorem_price ) ) {
return; // don''t do anything if any of the checkboxes is not checked
}
foreach ( $cart->cart_contents as $cart_item_key => $cart_item ) {
if ( isset( $lorem_price[ $cart_item_key ][''lorem''] ) ) {
// Use following line if lorem price is set at variation level
$id = ( ! empty( $cart_item[''variation_id''] ) && $cart_item[''variation_id''] > 0 ) ? $cart_item[''variation_id''] : $cart_item[''product_id''];
// Use following line if lorem price is set at product level
// $id = $cart_item[''product_id''];
$new_price = get_post_meta( $id, ''your_custom_meta_field'', true ); // fetch price from custom field
$cart_item[''data'']->price = $new_price;
}
}
}
}
Actualmente estoy en un problema donde tengo que agregar la opción en el carro con la casilla de verificación (para cada artículo en el carro) que cambiará el precio del artículo con uno del atributo personalizado.
Esta es una ilustración de esto (ya he creado un campo personalizado, solo necesito actualizar el precio cuando se hace clic en el botón "Actualizar carro")
Código para mostrar la casilla de verificación para cada elemento (/woocommerce/templates/cart/cart.php):
<td class="product-url">
<?php
$html = sprintf( ''<div class="lorem"><input type="checkbox" name="cart[%s][lorem]" value="%s" size="4" class="input-text url text" /> Lorem price</div>'', $cart_item_key, esc_attr( $values[''url''] ) );
echo $html;
?>
</td>