Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save DeveloperWil/0decf69258a03d6a18eea8e8a6eac252 to your computer and use it in GitHub Desktop.
Save DeveloperWil/0decf69258a03d6a18eea8e8a6eac252 to your computer and use it in GitHub Desktop.
WooCommerce: Stripe product and customer metadata
/**
* Add Stripe metadata along with WooCommerce purchase
*
* @param $metadata
* @param $order
* @param $source
* @return mixed
*/
function wbdc_filter_wc_stripe_payment_metadata( $metadata, $order, $source ) {
/**
* Get order data
*/
$order_data = $order->get_data();
$metadata[ __( 'Billing Company', 'woocommerce-gateway-stripe' ) ] = sanitize_text_field( $order_data['billing']['company'] );
$metadata[ __( 'Customer Name', 'woocommerce-gateway-stripe' ) ] = sanitize_text_field( $order_data['billing']['first_name'] . ' ' . $order_data['billing']['last_name'] );
$metadata[ __( 'Customer Phone', 'woocommerce-gateway-stripe' ) ] = sanitize_text_field( $order_data['billing']['phone'] );
/**
* List products purchased
*/
$count = 1;
foreach( $order->get_items() as $item_id => $line_item ){
$item_data = $line_item->get_data();
$product = $line_item->get_product();
$product_name = $product->get_name();
$item_quantity = $line_item->get_quantity();
$item_total = $line_item->get_total();
$metadata['Line Item '.$count] = 'Product name: '.$product_name.' | Quantity: '.$item_quantity.' | Item total: '. number_format( $item_total, 2 );
$count += 1;
}
return $metadata;
}
add_filter( 'wc_stripe_payment_metadata', 'wbdc_filter_wc_stripe_payment_metadata', 10, 3 );
@MuggleWizard
Copy link

MuggleWizard commented Nov 16, 2023 via email

@MuggleWizard
Copy link

I am now trying to get the product category from the order variable.

Here’s the latest code I was attempting that I found on stack overflow:

"As you mentioned get_categories() method of WC_Product class is deprecated. Instead you can use get_category_ids() method. However this method returns product category IDs, and It seems that you need category names so we can get the names from WP_Term objects.

Final code would be something like this:

add_action('woocommerce_checkout_create_order_line_item', 'add_order_item_custom_meta', 10, 4 );
function add_order_item_custom_meta($item, $cart_item_key, $cart_item, $order)
{
$product = $item->get_product(); // The WC_Product instance Object
$cat_ids = $product->get_category_ids(); // returns an array of cat IDs
$cat_names = [];

foreach ( (array) $cat_ids as $cat_id) {
    $cat_term = get_term_by('id', (int)$cat_id, 'product_cat');
    if($cat_term){
        $cat_names[] = $cat_term->name; // You may want to get slugs by $cat_term->slug
    }
}

$item->update_meta_data( '_raw_product_id', $product->get_id() );
$item->update_meta_data( '_raw_product_name', $cat_names );

};
"
I added this below your function for wbdc_filter_wc_stripe_payment_metadata but I’m getting an error processing message.
In researching the issue, I’ve found suggestions to use the $terms =wp_get_post_terms($post->ID, ‘product-cat’);
Or $terms = wp_get_post_terms( $item->get_product_id(), 'product_cat', array( 'fields' => 'names' ) );
I’ve tried adding these lines to your original code but I can’t seem to get them to work correctly. If you have any advice, I’d appreciate it. Thanks again for your help.

@bryanm1990
Copy link

Hi, I need help. The code worked very well for me until I updated the version of WooCommerce 5 days ago, since then it has not loaded the metadata in Stripe, not even an error message appears.

@DeveloperWil
Copy link
Author

Hi, I need help. The code worked very well for me until I updated the version of WooCommerce 5 days ago, since then it has not loaded the metadata in Stripe, not even an error message appears.

The hook has nothing to do with the WooCommerce plugin. The hook is in the WooCommerce Stripe Payment Gateway plugin https://en-au.wordpress.org/plugins/woocommerce-gateway-stripe/.

Here's the line of code with the hook https://github.com/search?q=repo%3Awoocommerce%2Fwoocommerce-gateway-stripe%20wc_stripe_payment_metadata&type=code.

WooCommere has been pushing hard for everyone to upgrade to the new payment gateway WooPayments. If you are using the new WooPayments plugin, there is no equivalent, sorry.

@progmartin
Copy link

thank you

@githubuser5789
Copy link

Hello. I am trying to follow your tutorial here. Am I in the right place for the code discussed? I did not see the direct github link in the video description.

https://www.youtube.com/watch?v=I82v_QOgt9Y

Screenshot 2024-03-28 192905

@DeveloperWil
Copy link
Author

Hello. I am trying to follow your tutorial here. Am I in the right place for the code discussed? I did not see the direct github link in the video description.

https://www.youtube.com/watch?v=I82v_QOgt9Y

Screenshot 2024-03-28 192905

Yes, this is the code repository.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment