<?php
/**
* Class ItemMeta
*
* @package WPDesk\FS\TableRate\Order
*/
namespace WPDesk\FS\TableRate\Order;
use FSVendor\WPDesk\PluginBuilder\Plugin\Hookable;
use WC_Order_Item;
use WC_Order_Item_Shipping;
use WPDesk\FS\TableRate\ShippingMethod\RateCalculator;
use WPDesk\FS\TableRate\ShippingMethodSingle;
use WPDesk_Flexible_Shipping;
/**
* Can display order meta.
*/
class ItemMeta implements Hookable {
/**
* Hooks.
*/
public function hooks() {
add_action( 'woocommerce_checkout_order_created', [ $this, 'update_order_shipping_meta' ] );
add_action( 'woocommerce_before_order_itemmeta', [ $this, 'filter_meta_if_flexible_shipping_method' ], 10, 2 );
add_action( 'woocommerce_after_order_itemmeta', [ $this, 'remove_filter_meta_if_flexible_shipping_method' ] );
}
/**
* @param \WC_Order $order .
*/
public function update_order_shipping_meta( $order ) {
if ( $order ) {
foreach ( $order->get_shipping_methods() as $shipping_method ) {
$shipping_method->delete_meta_data( RateCalculator::DESCRIPTION_BASE64ENCODED );
$shipping_method->save_meta_data();
}
}
}
/**
* @param int $item_id .
* @param WC_Order_Item $item .
*/
public function filter_meta_if_flexible_shipping_method( $item_id, WC_Order_Item $item ) {
if ( $item instanceof WC_Order_Item_Shipping ) {
if ( in_array( $item->get_method_id(), [ WPDesk_Flexible_Shipping::METHOD_ID, ShippingMethodSingle::SHIPPING_METHOD_ID ], true ) ) {
add_filter( 'woocommerce_hidden_order_itemmeta', [ $this, 'hide_flexible_shipping_item_meta' ] );
add_filter( 'woocommerce_order_item_display_meta_key', [ $this, 'format_display_key' ] );
}
}
}
/**
* @param string $key .
*
* @return string
*/
public function format_display_key( $key ) {
return RateCalculator::DESCRIPTION === $key ? __( 'Description', 'flexible-shipping' ) : $key;
}
/**
* @param array $hidden_order_item_meta .
*
* @return array
*/
public function hide_flexible_shipping_item_meta( $hidden_order_item_meta ) {
$hidden_order_item_meta[] = RateCalculator::FS_INTEGRATION;
$hidden_order_item_meta[] = RateCalculator::DESCRIPTION_BASE64ENCODED;
return $hidden_order_item_meta;
}
/**
* .
*/
public function remove_filter_meta_if_flexible_shipping_method() {
remove_filter( 'woocommerce_hidden_order_itemmeta', [ $this, 'hide_flexible_shipping_item_meta' ] );
remove_filter( 'woocommerce_order_item_display_meta_key', [ $this, 'format_display_key' ] );
}
}