如何从另一个插件中正确调用一个依赖于WooCommerce变量的插件中的函数

时间:2018-10-23 04:08:41

标签: wordpress woocommerce woocommerce-rest-api

我正在使用带有两个插件的WooCommerce:

  • Yith礼品卡和
  • 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 );
            }
        }

1 个答案:

答案 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');