-
-
Save plugin-republic/525acbfc37d91e97091c6823229a1aa3 to your computer and use it in GitHub Desktop.
<?php | |
function prefix_update_existing_cart_item_meta() { | |
$cart = WC()->cart->cart_contents; | |
foreach( $cart as $cart_item_id=>$cart_item ) { | |
$cart_item['new_meta_data'] = 'Your stuff goes here'; | |
WC()->cart->cart_contents[$cart_item_id] = $cart_item; | |
} | |
WC()->cart->set_session(); | |
} |
It is working for me. It's up to you to use it to your advantage. I put it in add_action('woocommerce_add_to_cart', ...
with an added if (! isset($cart_item['new_meta_data'])) { ...
so that it only applies once when the item is created. Otherwise, the value would be overwritten.
@CUBICinfinity Thanks for the update...
Would it be possible if you can write down the full snippet and how you used it with add_action('woocommerce_add_to_cart',
?
Yeah, no problem. This is still under development as I work things out. What I'm wanting to do involves manipulating the quantity and I'm storing a side value for quantity that doesn't get altered until I tell it to be altered. I cleaned this up to just what's relevant. There are other functions and line in the snippet not shown here I've been experimenting with.
function spit_cart_items() {
foreach (WC()->cart->get_cart() as $cart_item) {
var_dump($cart_item);
echo "<br/><br/>";
}
}
// https://pluginrepublic.com/how-to-update-existing-woocommerce-cart-meta-data/
function write_custom_cart_data() {
$cart = WC()->cart->cart_contents;
foreach( $cart as $cart_item_id=>$cart_item ) {
if (! isset($cart_item['new_meta_data'])) {
$cart_item['new_meta_data'] = $cart_item['quantity'];
WC()->cart->cart_contents[$cart_item_id] = $cart_item;
}
}
WC()->cart->set_session();
}
// TEST
if (in_array('administrator', wp_get_current_user()->roles)) {
// How do we make it execute once and be a permanent meta field?
add_action('woocommerce_add_to_cart', 'write_custom_cart_data', 4);
add_action('woocommerce_before_cart_table', 'spit_cart_items', 11);
}
I've found that if I remove the write_custom_cart_data
action from the snippet then I lose the previously saved custom data after saving the changes to the snippet. I don't know what happens if I remove WC()->cart->set_session();
. I'm guessing that it won't update the cart and the WC session will act like it hasn't been modified. But I'm still discovering how WooCommerce works. I also am fairly new to the idea of sessions.
Thanks @CUBICinfinity i will give this a try and update back here for feedback if any... stay awesome...
snippet not working!