我正在使用带有两个插件的WooCommerce:
Yith礼品卡插件,可让您为商店出售礼品卡代币。 当某人购买礼品卡时,WooCommerce订单确认书上会印有礼品代码。
WooCommerce POS插件可让您从打印机打印收据。问题是优惠券代码未显示在此打印的收据上。
优惠券代码如何添加到WooCommerce电子邮件中
Yith礼品卡插件通过WooCommerce电子邮件挂钩添加了一个动作,这是从Yith插件php中摘录的代码:
import cv2
import numpy as np
coords_list = np.array([[3,5],[40,25],[25,54]], dtype=np.uint8)
pixel_list = np.array([[255,0,0],[0,255,0],[0,0,255]], dtype=np.uint8)
black_image =np.zeros((48,64,3))
cv2.imshow('black_image', black_image)
while (1):
k = cv2.waitKey(0) #press esc to kill
if (k == 27):
break
cv2.destroyAllWindows()
I,J = np.transpose(coords_list)
black_image[I,J] = [255,255,255]
cv2.imshow('black_image', black_image)
while (1):
k = cv2.waitKey(0) #press esc to kill
if (k == 27):
break
cv2.destroyAllWindows()
black_image[I,J] = pixel_list
cv2.imshow('black_image', black_image)
while (1):
k = cv2.waitKey(0) #press esc to kill
if (k == 27):
break
cv2.destroyAllWindows()
这导致优惠券代码显示在WooCommerce订单电子邮件中。
我希望相同的优惠券代码显示在打印的POS收据上。
如何生成打印的POS收据
我发现该文件负责打印已打印的POS收据。 在这里:https://github.com/kilbot/WooCommerce-POS/blob/master/includes/views/print/receipt-html.php
我如何从receive-html.php中调用show_gift_card_code函数?这样才能成功显示礼品卡优惠券代码?
class YITH_WooCommerce_Gift_Cards {
...
add_action( 'woocommerce_order_item_meta_start', array(
$this,
'show_gift_card_code',
), 10, 3 );
}
public function show_gift_card_code( $order_item_id, $item, $order ) {
$code = wc_get_order_item_meta( $order_item_id, YWGC_META_GIFT_CARD_NUMBER );
if ( ! empty( $code ) ) {
printf( '<br>' . __( 'Gift card code: %s', 'yith-woocommerce-gift-cards' ), $code );
}
}
答案 0 :(得分:1)
WooCommerce POS是一个javascript应用程序,因此收据模板仅呈现一次,然后填充从WC REST API检索的每个订单。尝试插入特定订单的数据将无法正常工作。
在这种情况下,您的订单商品元存储在密钥_ywgc_gift_card_number
中。通常认为在前面带有下划线的元数据是私有的,因此大多数模板(包括WooCommerce POS)将不会显示此元数据。
一种解决方案是过滤WC REST API响应,以将元密钥更改为没有下划线的内容。下面显示了一些example code,您需要将其放置在主题functions.php file中。
function my_custom_wc_rest_shop_order_object($response)
{
if (function_exists('is_pos') && is_pos()) {
$data = $response->get_data();
if (is_array($data['line_items'])) : foreach ($data['line_items'] as &$line_item) :
if ($code = wc_get_order_item_meta($line_item['id'], '_ywgc_gift_card_number')) {
$line_item['meta_data'][] = new WC_Meta_Data(array(
'id' => '',
'key' => 'Gift Card',
'value' => $code,
));
}
endforeach; endif;
$response->set_data($data);
}
return $response;
}
add_filter('woocommerce_rest_prepare_shop_order_object', 'my_custom_wc_rest_shop_order_object');