添加不存在的订单元数据以扩展 WooCommerce 管理订单搜索特定产品

问题描述 投票:0回答:1

我在之前的问题之后还有一个问题:添加不存在的订单元数据以扩展 WooCommerce 管理订单搜索

我有两个问题:

第一:如果我希望只有当客户购买了id为120和260的两个产品时才保存这个md5值,该怎么办? (即当支付成功并完成购买时,如果ID为120和260的这两种产品之一或两种产品都在客户(成功)的订单中,则应存储此md5值)

  • 这个问题的另一个请求,可以检查一下这个客户的md5值之前是否保存过,新的值会保存吗?因为md5码是根据邮箱创建的,对于特定邮箱的客户,肯定会得到重复的金额。

第二: 订购两个特定产品(例如 ID 120 和 260)后,如何执行以下代码或执行一段 php 代码?

$pro_message = 'Hi dear'
echo $pro_message. 'custom php code';
php woocommerce metadata admin orders
1个回答
0
投票

为了使 “仅当特定产品在购物车(或订单商品)中时才保存此 md5 值,我们需要一个可重用的条件函数来检查商品:

// Conditional function: Check if specific products are in cart or order items function has_items_for_email_md5( $object_items ) { $found_120 = $found_260 = false; // Initializing foreach ( $object_items as $item ) { $product_id = isset($item['product_id']) ? $item['product_id'] : $item->get_product_id(); $variation_id = isset($item['variation_id']) ? $item['variation_id'] : $item->get_variation_id(); if ( in_array('120', [$product_id , $variation_id]) ) $found_120 = true; if ( in_array('260', [$product_id , $variation_id]) ) $found_260 = true; } return ( $found_120 && $found_260 ); }
现在我们可以对之前的代码进行一些小的更改,这将使用这个条件函数:

// When order is created after checkout add_action( 'woocommerce_checkout_create_order', 'save_billing_email_md5', 20, 2 ); function save_billing_email_md5( $order, $data ) { if ( ! has_items_for_email_md5( WC()->cart->get_cart() ) ) return; if( $billing_email = $order->get_billing_email() ) { $order->add_meta_data('_billing_email_md5', md5($billing_email)); } } // When an order is manually created/updated in admin add_action( 'woocommerce_process_shop_order_meta', 'admin_save_billing_email_md5' ); function admin_save_billing_email_md5( $order_id ) { $order = wc_get_order( $order_id ); if ( ! has_items_for_email_md5( $order->get_items() ) ) return; if( $billing_email = $order->get_billing_email() ) { update_post_meta($order_id, '_billing_email_md5', md5($billing_email)); } }
最后一个功能保持不变:

add_filter( 'woocommerce_shop_order_search_fields', 'extending_admin_orders_search_field', 10, 1 ); function extending_admin_orders_search_field( $meta_keys ){ $meta_keys[] = '_billing_email'; $meta_keys[] = '_billing_phone'; $meta_keys[] = '_payment_method_title'; $meta_keys[] = '_billing_email_md5'; // <=== HERE return $meta_keys; }
应该可以。


然后,为了在购买这两种特定产品(ID 120 和 260)后执行一些代码,我们将使用我们的条件函数,如下所示(来自订单 ID):

$order = wc_get_order( $order_id ); // Get WC_Order object (if needed) if ( has_items_for_email_md5( $order->get_items() ) ) { $pro_message = __('Hi dear'); echo $pro_message . __('custom php code'); }
    
© www.soinside.com 2019 - 2024. All rights reserved.