<?php
/**
* Trait ImporterExporter
*
* @package WPDesk\FS\TableRate\ImporterExporter
*/
namespace WPDesk\FS\TableRate\ImporterExporter;
use stdClass;
use WPDesk\FS\TableRate\ImporterExporter\Importer\Exception\ImportCSVException;
/**
* Trait ShippingClassTrait
*
* @package WPDesk\FS\TableRate\ImporterExporter
*/
trait ShippingClassTrait {
/**
* Hashmap for shipping classes with name->term_id data.
*
* @var stdClass[]
*/
public $wc_shipping_classes_hashmap;
/**
* Init action.
*/
public function init_shipping_class() {
$this->wc_shipping_classes_hashmap = $this->prepare_shipping_class_hashmap();
}
/**
* Prepares hashmap for fast checking the term_id of given shipment class.
*
* @return array
*/
public function prepare_shipping_class_hashmap() {
$shipping_classes = array();
foreach ( WC()->shipping()->get_shipping_classes() as $class ) {
$shipping_classes[ html_entity_decode( $class->name ) ] = (int) $class->term_id;
}
return $shipping_classes;
}
/**
* Find and returns shipping class term id
*
* @param string $name Shipping class name to search.
*
* @return int|null Term id
*/
public function find_shipping_class_by_name( $name ) {
$name = html_entity_decode( $name );
if ( isset( $this->wc_shipping_classes_hashmap[ $name ] ) ) {
return (int) $this->wc_shipping_classes_hashmap[ $name ];
}
return null;
}
/**
* Creates a shipping class
*
* @param string $name Shipping class name.
* @param string $description Shipping class description.
*
* @return int Term id
* @throws ImportCSVException When can't create the class.
*/
public function create_shipping_class( $name, $description ) {
$term_id = wp_insert_term( $name, 'product_shipping_class', array( 'description' => $description ) );
if ( is_wp_error( $term_id ) ) {
throw new ImportCSVException(
sprintf(
// Translators: rule shipping class and wp_error message.
__( 'Error while creating shipping class: %1$s, %2$s', 'flexible-shipping' ),
$name,
$term_id->get_error_message()
)
);
}
$term_id = (int) $term_id['term_id'];
$this->wc_shipping_classes_hashmap[ html_entity_decode( $name ) ] = $term_id;
return $term_id;
}
}