php - 订单完成后获取自定义字段值 woocommerce 挂钩
问题描述
我已向所有产品添加了名为“pin_type”的自定义字段。
该字段具有字符串值“single”或“multi”等。我在function.php中使用'woocommerce_order_status_completed'挂钩来做一些事情。
我只是无法获得自定义的“pin_type”值来显示任何内容。我使用 phpMyadmin 在 wp 数据库中搜索 pin_item,每个产品 pin_item 似乎都在 wp_postmeta 表中的“meta_key”列下,并且值在“meta_value”列下。
如何根据订单中的产品获得价值?
add_action( 'woocommerce_order_status_completed', 'pincodeactions', 10, 1);
function pincodeactions( $order_id ) {
$order = wc_get_order( $order_id );
$order_id = $order->get_id();
$price = $order->get_total();
$billing_email = $order->get_billing_email();
$paid_date = date('Y-m-d h:m:s', strtotime($order->get_date_paid()));
//$pin_type = $order->get_meta('pin_type'); //not working: Returns empty string
$pin_type = get_post_meta( $this->order->get_id(), 'pin_type', true ); //ERROR: Using $this when not in object context
echo pin_type
解决方案
我找到了答案: Get a custom field value saved in Order items meta in a hooked function
我的工作代码:
add_action( 'woocommerce_order_status_completed', 'pincodeactions', 10, 1);
function pincodeactions( $order_id ) {
$order = wc_get_order( $order_id );
$order_id = $order->get_id();
$price = $order->get_total();
$billing_email = $order->get_billing_email();
$paid_date = date('Y-m-d h:m:s', strtotime($order->get_date_paid()));
//Get pin type
$order = wc_get_order($order_id);
$items = $order->get_items();
foreach ($items as $item) {
$product_id = $item['product_id'];
$pin_type = get_post_meta($product_id, 'pin_type', true);
if (empty($pin_type)){
$pin_type = 'test';
}
}
推荐阅读
- javascript - 将列表子项传递给父项
- asp.net-mvc - 如何在asp.net核心的一个解决方案中定义的2个项目中定义(控制器/方法)的路由?
- javascript - 在 localStorage 中存储用户 API 密钥的最佳实践
- android - 如何在下面的 android webview api 19 中使用 chrome DevTools?
- ionic-framework - Ionic 3 如何修复离子幻灯片的第一张幻灯片,其中应该显示规格和用户在报价之间滑动以进行比较?
- javascript - Javascript ES6 - 是否可以在子类中不使用 this 关键字的情况下使用/调用超类属性或函数
- xamarin - 使用 Xamarin.Forms MessagingCenter 在 ViewModel 和方法之间进行通信有什么优点或缺点吗
- html - 什么时候需要为语义添加类?
- msal - 是否可以使用从 MSAL(MS 身份平台)收到的 JWT Bearer 来访问 MS AppCenter API?
- spring-boot - 如何在 Wildfly14 上配置 JavaMailSender