Как правильно вызвать функцию в одном плагине, из другого плагина, который зависит от переменных WooCommerce - PullRequest
0 голосов
/ 23 октября 2018

Я использую WooCommerce с двумя плагинами:

  • Yith Gift Card и
  • WooCommerce Pos.

Плагин Yith Gift Card, позволяющий продавать токены Gift Card для вашего магазина.Когда кто-то покупает подарочную карту, в подтверждении заказа WooCommerce указан печатный код.

Плагин WooCommerce POS, позволяет распечатать квитанцию ​​с принтера.Проблема заключается в том, что код купона не отображается в этой распечатанной квитанции.

Как код купона добавляется в электронное письмо WooCommerce

Плагин Yith Gift Card добавляет действие через электронную почту WooCommercehook, вот код, взятый из плагина Yith php:

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 );
            }
        }

В результате код купона будет отображаться в электронном письме заказа WooCommerce.

Я хочу, чтобы тот же код купона появился в распечатанной квитанции POS.

Как создается печатная квитанция POS

Я нашел файл, ответственный за печать печатной квитанции POS.Это здесь: https://github.com/kilbot/WooCommerce-POS/blob/master/includes/views/print/receipt-html.php

Как я могу вызвать функцию show_gift_card_code из получения-html.php?Чтобы он успешно отображал код купона подарочной карты?

<table class="order-items">
  <thead>
    <tr>
      <th class="product"><?php /* translators: woocommerce */ _e( 'Product', 'woocommerce' ); ?></th>
      <th class="qty"><?php _ex( 'Qty', 'Abbreviation of Quantity', 'woocommerce-pos' ); ?></th>
      <th class="price"><?php /* translators: woocommerce */ _e( 'Price', 'woocommerce' ); ?></th>
    </tr>
  </thead>
  <tbody>
  {{#each line_items}}
    <tr>
      <td class="product">
        {{name}}
        [*I WOULD LIKE THE COUPON CODE DISPLAYED HERE*]
        {{#with meta}}
        <dl class="meta">
          {{#each []}}
          <dt>{{label}}:</dt>
          <dd>{{value}}</dd>
          {{/each}}
        </dl>
        {{/with}}
      </td>

1 Ответ

0 голосов
/ 23 октября 2018

WooCommerce POS представляет собой приложение javascript, поэтому шаблон квитанции отображается один раз, а затем заполняется каждым заказом, полученным из API REST WC.Попытка вставить данные для определенного заказа не будет работать должным образом.

В этом случае мета позиции заказа сохраняется с ключом _ywgc_gift_card_number.Мета с подчеркиванием спереди обычно считается частной, поэтому большинство шаблонов (включая WooCommerce POS) не будут отображать эти метаданные.

Одним из решений будет фильтрация ответа API REST WC для изменения мета-ключа на что-тобез подчеркивания.Ниже приведен пример примера кода , вам необходимо разместить его в вашей теме 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');
...